如果我正在创建一个具有 HTTPClient
并用 @Schedule
->afterwars取消部署应用程序(例如tomcat或jboss)我正在创建一个类加载器内存泄漏。
如果我删除 @Schedule
注解,取消部署后需要一些时间,但是 HttpClientImpl$SelectorManager
是gced。
我想 @Schedule
机修工与班级保持着软联系,因此 HTTPClient
(这通常允许gced),但是 HttpClientImpl$SelectorManager
不明白这一点并保持开放?!
有没有人有类似的问题或者有什么想法?
马特:(我有3个 @Schedule
注解类/方法)
(openjdk build 11.0.9+11 lts,spring boot 2.4.4版)
1条答案
按热度按时间col17t5w1#
这个
HttpClientImpl$SelectorManager
当它检测到所有操作都已终止,并且对HttpClient
已经被释放了。但是,在发布所有引用的时间和SelectorManager
线程注意到了。默认情况下,这可能长达3秒。如果你观察到
SelectorManager
线程仍在运行-这可能是因为:仍然有一些强有力的证据提到
HttpClient
,一些请求仍在进行中
这个
SelectorManager
还没有注意到它可以终止