模板WriterBuffer内存泄露问题

memory_200.jpg

code_200.jpg

@波总  我直接在springboot中单独引用的jfinal模板,在每次关闭tomcat时,会提示内存泄漏

评论区

JFinal

2019-01-11 10:54

这个是 tomcat 误报而已,严格来说也不是误报,因为 tomcat 的措辞是:"probable memory leak"。也就是说 tomcat 也只是猜测可能有内存泄露

为了重用 buffer,避免内存分配, jfinal enjoy 引擎使用 ThreadLocal 绑定了 buffer。这个 buffer 的生命周期与 Thread 是一样长的,所以被 tomcat 误报

关于这个问题 jfinal 官方是经过严格测试的,例如进行了最为极端的测试:每次请求 new 出新线程来绑定 buffer,观测 buffer 是否被回收,确证回收无误。

而 jfinal enjoy 的 buffer 在实际使用时是与线程池中的 Thread 绑定的, new 出来的 buffer 的数量是确定的。

你使用 jfinal undertow 就不会误报这个信息了,建议切到 jfinal undertow。如果你是在使用 Spring ,也可以用它的 undertow

WenJ

2019-01-11 10:57

@JFinal 好的,非常感谢 波总!!!

JFinal

2019-01-11 11:01

我再补充一下,有不少人以为 ThreadLocal 中的变量需要在使用完以后立即 remove() 掉,这个是不正确的,ThreadLocal 在源码中给出来实例就没有 remove() 掉

WenJ

2019-01-11 15:04

@JFinal 感谢波总解答!!

热门反馈

扫码入社