Hibernate映射导致内存泄漏

时间:2013-12-16 15:53:43

标签: java hibernate tomcat hibernate-mapping

我有一个在tomcat中运行的java web应用程序,通过hibernate与我的db通信。数据库上的字段is_enabled在数据库上映射为TINYINT,但hbm.xml中的布尔值:

<property name="isEnabled" type="boolean">
        <column name="is_enabled"  />
</property>

我知道映射没有问题,因为我有另一个列,它是一个TINYINT(1)并在hbm.xml中映射为一个布尔值。但是当我添加这个属性时,我的WAR没有加载,而在Tomcat中我得到了几个:

org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
 SEVERE: The web application [] appears to have started a thread name
 [Job_Executor2] but has failed to stop it.  This is very likely to
 create a memory leak.

知道如何调试这个吗?

1 个答案:

答案 0 :(得分:1)

  

我知道映射没有任何问题,因为我有另一个专栏   这是一个TINYINT(1)并在hbm.xml中映射为布尔值。

仅通过查看布尔属性本身很难评论。也许看看整个hbm.xml可能会给出一个想法。此外,是否在您的应用程序的初始化(或您的一个servlet或bean或您有什么)执行的代码正在查看此属性并使用它执行某些操作?

这种财产本身不太可能是罪魁祸首。机会是内存泄漏(或者你的根本原因)已经存在,并且这个属性的存在(以及休眠中的任何代码......或者应用程序中的 )都会导致引爆点。

也就是说,罪魁祸首不是这个属性。它只是一种催化剂,可以使现有的软件或系统错误显现出来。

  

知道如何调试这个吗?

对于这样的问题,最好使用像JProfiler这样的专业($$$)分析工具。

但是我还使用了其他开源或免费工具来解决与内存相关的问题(由Web服务,hibernate或者你有什么引起的。)有一些选择。

  1. Eclipse Memory Analyzer - 当我不得不根源导致代码与hibernate交互时出现问题时,这个工具对我来说是天赐之物。

  2. VisualGCVisualVM - 这些是两个截然不同但密切相关的工具,可以帮助您根本导致问题(或至少缩小问题所在的位置)是)。

  3. 像这样的事情需要采取多管齐下的方法,你会发现自己会使用几种工具来遮盖这只猫。

    列出上面列出的这三个工具。希望他们能帮忙。