OkHttp 在内部为连接池和某种看门狗创建线程。我见过很多人在使用这个库关闭应用程序时遇到这个问题。作者本身似乎并不愿意解决它(https://github.com/square/okhttp/issues/2482,“边际 yield ”)。具体来说,Tomcat 提示内存泄漏,因为线程被抛在后面。看起来这些最终被清理了,有时是在相当长的延迟之后。所以,我的问题是:实际上是否因为这个问题而导致内存泄漏?最终线程会消失,所以这应该意味着所有线程都可以被垃圾收集。正确吗?
最佳答案
我是那些不喜欢 Tomcat 代码卸载的 OkHttp 作者之一。我们将在下一个次要版本中发布我们自己的并发抽象; details here .这可能会缩短关闭最后一个响应和最后一个线程退出之间的 60 秒延迟。
您不应该在现代程序中进行代码卸载。 Tomcat 诞生于 JVM 是长生命周期容器的时代;今天是 Kubernetes 或其他集群编排技术。 Tomcat 的代码卸载策略迫使您跳过尴尬的管理环节。如果您正在与类加载器或安全管理器作斗争,那么您就是在虚构的问题上浪费时间。
关于java - 使用 OkHttp 时 Webapp 取消部署内存泄漏,是否误报?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58537529/