如何调试Java OutOfMemory异常?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何调试Java OutOfMemory异常?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1467字,纯文字阅读大概需要3分钟。
内容图文
![如何调试Java OutOfMemory异常?](/upload/InfoBanner/zyjiaocheng/708/22ee51c6da1342418f7a75a98eaa0bc6.jpg)
调试java.lang.OutOfMemoryError异常的最佳方法是什么?
当我们的应用程序发生这种情况时,我们的应用服务器(Weblogic)会生成堆转储文件.我们应该使用堆转储文件吗?我们应该生成Java线程转储吗?究竟有什么区别?
更新:生成线程转储的最佳方法是什么? kill -3(我们的应用程序在Solaris上运行)是杀死应用程序并生成线程转储的最佳方法吗?有没有办法生成线程转储但不杀死应用程序?
解决方法:
分析和修复Java中的内存不足错误非常简单.
在Java中,占用内存的对象都链接到其他一些对象,形成一棵巨树.想法是找到树的最大分支,这通常指向内存泄漏情况(在Java中,当您忘记删除对象时,泄漏内存,但是当您忘记忘记对象时,即保留在某处提到它).
步骤1.在运行时启用堆转储
使用-XX运行您的进程:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath = / tmp
(始终启用这些选项是安全的.根据需要调整路径,必须由java用户写入)
第2步.重现错误
让应用程序运行,直到发生OutOfMemoryError.
JVM将自动写入类似java_pid12345.hprof的文件.
第3步.获取转储
将java_pid12345.hprof复制到您的PC(它将至少与您的最大堆大小一样大,因此可以变得非常大 – 如有必要,请将其gzip).
步骤4.使用IBM的Heap Analyzer或Eclipse的Memory Analyzer打开转储文件
堆分析器将为您显示错误发生时所有对象的树.
有可能在打开时直接指出问题.
注意:给HeapAnalyzer足够的内存,因为它需要加载你的整个转储!
java -Xmx10g -jar ha456.jar
步骤5.确定最大堆使用的区域
浏览对象树并识别不必要地保留的对象.
请注意,也可能发生所有对象都是必需的,这意味着您需要更大的堆.大小和tune堆appropriately.
第6步.修复代码
确保只保留实际需要的物体.及时从集合中删除项目.确保不要保留对不再需要的对象的引用,然后才能对它们进行垃圾回收.
内容总结
以上是互联网集市为您收集整理的如何调试Java OutOfMemory异常?全部内容,希望文章能够帮你解决如何调试Java OutOfMemory异常?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。