Java内存泄漏查找

Java内存泄漏查找Java 由于拥有自动垃圾回收机制 所以一般情况下 我们不需要考虑内存泄漏的问题 jvm 会自动收回无用的对象 所谓无用的对象 表示你的程序不可能再访问的对象 但是 有一种情况必须考虑 就是要防止容器 List Map 等 内的对象无限增大 因为对象存贮在容器中 会被容器引用 从而如果容器的有效 容器内的对象就不会释放 一旦真的出现内存泄漏 随着时间的推移 java 程序逐渐增大内存消耗 最后出现

Java由于拥有自动垃圾回收机制,所以一般情况下,我们不需要考虑内存泄漏的问题。jvm会自动收回无用的对象。所谓无用的对象,表示你的程序不可能再访问的对象。

但是,有一种情况必须考虑,就是要防止容器(List,Map等)内的对象无限增大。因为对象存贮在容器中,会被容器引用,从而如果容器的有效,容器内的对象就不会释放。

一旦真的出现内存泄漏,随着时间的推移,java程序逐渐增大内存消耗,最后出现OutOfMemory异常而终止。

如何查找内存泄漏?

这种情况下,一般需要找到内存泄漏的对象。也就是要找到哪个对象数量最大。我们可以利用JavaSDK 自带的工具 jmap

在命令行中输入: jmap -histo:live [java进程id]>C:Log.txt

例如:如果当前内存泄漏的程序进程id是 3696,但是进程还没有终止。这个时候,可以在命令行中输入 jmap -histo:live 3696>C:\\Log.txt

这样会将结果输入到C:\\Log.txt文件中,应写字板打开,可以看到对象数量以及占用内存情况:

……

以上日志可以看出,World.GameMap.ChangeTunAction类的实例数量有个,占用内存1.28G,因此可以断定,是这个类的对象没有释放造成内存泄漏。

查找源程序相关代码,可以迅速找到出错位置。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232827.html原文链接:https://javaforall.net

(0)
上一篇 2025年9月7日 下午5:01
下一篇 2025年9月7日 下午5:22


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号