java - Web应用程序中的内存泄漏,tomcat+hibernate+Guice

标签 java hibernate jakarta-ee tomcat jvisualvm

在多次重新部署后,应用程序因 PermGen 错误而崩溃。我知道增加 permgen 大小的变通方法。但我试图揭示泄漏的原因。重新部署后,我使用 jvisualvm 进行堆转储并搜索 WebAppClassLoader 的实例。正如预期的那样,有一个不是 GC-ed。显示最近的 GC 根点到 platformMBeanServer(MangementFactory 类型)。所以问题是我能用它做什么?

enter image description here

还有一些额外的信息。我的 jdbc 驱动程序 jar 位于 tomcat 的 lib 目录和 bin 目录中的 .dll 文件中。当我评论 hibernate sessionFactory creation - 问题消失。 session 工厂在servlet filter的init方法中创建,在destroy方法中关闭。 Hibernate 使用 c3p0 连接池。

最佳答案

您可以尝试添加这些 Java 选项:

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

这会在 PermGen 空间中启用垃圾收集(默认情况下关闭)并允许 GC 卸载类。

关于java - Web应用程序中的内存泄漏,tomcat+hibernate+Guice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22168348/

相关文章:

java - 在浏览器上运行 swing 应用程序

java - 如何使用Struts 2和Hibernate维护 session ?

java - HQL:条件查询内的划分

hibernate - 为什么 hibernate 在搜索 id 时设法使用 JOIN 而不是在另一个字段上?

java - Java 中最好的企业购物车是什么?

java - 获取二进制文件和文本信息

java - 为什么 1 != 1 返回真?

java - hadoop中的多个输出

java - 如何设置自定义按钮状态背景颜色?

java - 如何将 java.util.Properties 数据类型以 JSON 形式传递给 Controller ​​?