gpt4 book ai didi

java - Web 服务客户端中的 ThreadLocal 泄漏

转载 作者:行者123 更新时间:2023-12-02 05:08:43 24 4
gpt4 key购买 nike

我有一个独立的应用程序,它使用 VMware 的 Java Webservice API,这是 Web 服务客户端的包装器。我使用大小为 5 的固定线程池来调用库中的 API。运行一段时间(一两天)后,内存使用量逐渐增加,堆转储显示池线程的线程本地已经积累了大量内存。

有没有办法清除这些线程局部变量?由于Web服务调用实际上是从第三方库调用的,因此我无法直接清除线程局部变量。

最佳答案

这是一个与ThreadLocal相关的经典问题。线程局部变量是全局线程局部变量(受限并属于线程),它们不能与线程池一起使用,线程池即使在任务结束后也会保留线程。这最终将导致 PermGen 内存问题。

由于您无法更改第三方库中的 ThreadLocal ,因此您可以避免使用线程池并为每个任务随意创建/启动/销毁线程。这样您就可以避免线程在任务完成后仍处于 Activity 状态,并避免 ThreadLocal 变量意外占用内存。

有关更多信息,请阅读此 post

关于java - Web 服务客户端中的 ThreadLocal 泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27540443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com