内存泄露分析

源程序技术方案:

C-JNI-Java

事件起因:

用户在进行性能测试的过程中,发现运行一段时间,出现heap中内存无法回收,导致客户端挂掉

问题排查:

核心思想-什么对象一直占用内存,没有释放

排查工具:

gc.log

jvisualvm(查看heap中内存变化)

jmap(直观查看内存中对象占用)

mat (通过饼图分析)

分析过程

1.分析内存中对象占用

jmap -histo pid


通过上图可分析:

内存中[C 及java.lang.String对象一直增长,无法回收【注:[C代表char[]】

对应代码

查看代码逻辑


通过代码查看,字符串对象collection keyi没有释放,添加释放后,重新编译,持续运行

最终结果

jmap -histo pid

jvisualvm

通过工具观察,内存回收正常,没有内存泄露


参考链接:

在 JNI 编程中避免内存泄漏

内存分析工具使用 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容