JFinal

登录 注册

模板WriterBuffer内存泄露问题

memory_200.jpg

code_200.jpg

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

评论

  • 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
  • 01-11 10:57
    @JFinal 好的,非常感谢 波总!!!
  • 01-11 11:01
    我再补充一下,有不少人以为 ThreadLocal 中的变量需要在使用完以后立即 remove() 掉,这个是不正确的,ThreadLocal 在源码中给出来实例就没有 remove() 掉
  • 01-11 15:04
    @JFinal 感谢波总解答!!
  • 发送