首页
App
&
Coffee
文档
项目
分享
反馈
俱乐部
登录
注册
模板WriterBuffer内存泄露问题
WenJ
2019-01-11 10:40
@波总 我直接在springboot中单独引用的jfinal模板,在每次关闭tomcat时,会提示内存泄漏
项目:
JFinal
2
1
评论区
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
感谢波总解答!!
回复
发送
我要反馈
热门反馈
扫码入社
为了重用 buffer,避免内存分配, jfinal enjoy 引擎使用 ThreadLocal 绑定了 buffer。这个 buffer 的生命周期与 Thread 是一样长的,所以被 tomcat 误报
关于这个问题 jfinal 官方是经过严格测试的,例如进行了最为极端的测试:每次请求 new 出新线程来绑定 buffer,观测 buffer 是否被回收,确证回收无误。
而 jfinal enjoy 的 buffer 在实际使用时是与线程池中的 Thread 绑定的, new 出来的 buffer 的数量是确定的。
你使用 jfinal undertow 就不会误报这个信息了,建议切到 jfinal undertow。如果你是在使用 Spring ,也可以用它的 undertow