java – 由org.hibernate.internal.SessionFactoryImpl引起的可能的内存泄漏
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 由org.hibernate.internal.SessionFactoryImpl引起的可能的内存泄漏,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2014字,纯文字阅读大概需要3分钟。
内容图文
我用Java制作了MVC webapp,但是当我每天运行一次时,由于内存错误,它再次关闭.
这个错误是这样的:
线程“http-apr-12136-exec-42”中的异常java.lang.OutOfMemoryError:Java堆空间
java.sql.SQLException:java.lang.OutOfMemoryError:Java堆空间
我有hprof与崩溃的统计数据,具体如何使用内存.如果我使用Eclipse Memory Analizer打开hprof,我会得到以下结果:
在rar:https://mega.co.nz/#!Ht41xJDJ!MooePBSv5yOYSNN5OuvF7Afn2rcN-KJ2tXGSsgqtsaI
或者在文件夹中:https://mega.co.nz/#F!6hJUyKbQ!D_Kb23E3KfAJqcd5EeAt0A
在Overview报告中,我有这个图形(OverviewEMA.JPG):
我不知道这张图片说的是什么……我不明白.
在第二个选项卡中,默认报告,我有这个图形(DefaulReport_EMA.JPG):
它说问题可能是“org.hibernate.internal.SessionFactoryImpl”的一个实例.但我不知道如何解决这个问题.
在下一个标签中.在统治者树中,再次出现前一个实例,它使用大约42MB的内存(显示第一个图形的相同).图像是DominatorTree_EMA.JPG
如果我展开第一个类(给出问题的类),我有这个图形(DominatorTreeExpanded_EMA.JPG):
在下一个选项卡中,在直方图中,图形为此(Histogram_EMA.JPG):
在无法访问的对象中,结果就是这个(UnreachableObjects_EMA.JPG):
我不太了解这2个最后的图形
最后,我还有Java VisualVM的报告,我有这个结果(Heapdump_JVM.JPG):
根据此图形,除了Integer和String对象之外,HashMap对象也是问题所在.我认为Hashmap对象是类发送给jsp文件的模型的对象,它从JPA Objects(Hibernate的对象)开始,所以问题可能是这个,但我不知道如何解决它…
有人能帮助我吗?有人知道我该怎么办呢?您还需要更多信息吗?
谢谢!
解决方法:
在查看DominatorTree_Expanded时,您似乎重复创建了SessionFactorys(内存中有144个).这应该只在启动时创建一次,然后用于创建任意数量的Sessions.
另请参阅下面有关正确使用Hibernate Session的评论.
您的Hibernate会话应该是请求的本地会话 – 并在请求结束时关闭.在Controller处理过程中,您可以使用“OpenSessionInView”模式将会话绑定到线程.查看(JSP)渲染.
我怀疑,因为你要OutOfMemory,你将Hibernate Session作为Controller的“实例变量” – 或者作为一个静态的某个地方.永远不应该这样做.
由于Web请求可能是并发的,因此Controller永远不应将请求处理状态(例如Hibernate Sessions或可变变量)作为实例变量共享.这将导致不同请求之间的不必要的交互.线程.
内容总结
以上是互联网集市为您收集整理的java – 由org.hibernate.internal.SessionFactoryImpl引起的可能的内存泄漏全部内容,希望文章能够帮你解决java – 由org.hibernate.internal.SessionFactoryImpl引起的可能的内存泄漏所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。