Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对hibernate会话impl的Threadlocal引用,导致会话impl未被垃圾回收_Hibernate_Garbage Collection_Thread Local - Fatal编程技术网

对hibernate会话impl的Threadlocal引用,导致会话impl未被垃圾回收

对hibernate会话impl的Threadlocal引用,导致会话impl未被垃圾回收,hibernate,garbage-collection,thread-local,Hibernate,Garbage Collection,Thread Local,我正在使用本地线程来管理我的hibernate会话。最近,我在生产服务器上看到OutOfMemory异常。我在heap_转储上运行了EclipseMat,发现我的许多会话没有被垃圾收集,即使它们被tomcatse ThreadWithAttributes对象引用而关闭。这让我发疯了,现在我在不同的论坛上看到了很多类似问题的帖子,但是没有答案。任何帮助都将不胜感激 谢谢如果您在web应用程序中使用Hibernate会话,请不要让ThreadLocal中的会话对象在请求之间停留在那里-因为您无论如何

我正在使用本地线程来管理我的hibernate会话。最近,我在生产服务器上看到OutOfMemory异常。我在heap_转储上运行了EclipseMat,发现我的许多会话没有被垃圾收集,即使它们被tomcatse ThreadWithAttributes对象引用而关闭。这让我发疯了,现在我在不同的论坛上看到了很多类似问题的帖子,但是没有答案。任何帮助都将不胜感激


谢谢

如果您在web应用程序中使用Hibernate会话,请不要让ThreadLocal中的会话对象在请求之间停留在那里-因为您无论如何都无法控制线程,它们属于容器

如果您需要创建和关闭一个Web请求生命周期的会话,并且您不想在任何地方传递会话对象,则应该考虑编写ServLtFutter来处理清理,它将在每个请求周围调用。您还可以让该筛选器提交或回滚您可能已启动的任何事务


您应该阅读本页了解如何做的简单方法:

谢谢您的回复。我目前正在视图中使用open session,使用getCurrentSession(),这意味着该会话是按请求进行的,并在transaction.commit()时关闭。我可以看到会话正在关闭(虽然没有被清空),但是ThreadWithAttributes tomcat类以某种方式持有对sessionImpl的引用,从而防止它被垃圾收集。每个线程都会发生这种情况。我的数据库相当大,所以这会在几个小时或最多一天后导致内存不足错误,服务器需要被弹回