首页 > 编程语言 > 详细

使用Jprofiler分析Java项目的内存开销情况并利用强制回收控制内存

时间:2020-07-02 22:58:52      阅读:61      评论:0      收藏:0      [点我收藏+]

一、问题背景

自己开发的Java项目中占用太多的Heap Space。即使在Eclipse的虚拟机参数中设置“-Xms128m -Xms2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m”之后,仍超出Heap空间。决定用Jprofiler分析问题原因。

二、解决过程

Jprofier分析过程中,发现下面的char[]和java.lang.String对象占用大量heap堆内存

技术分享图片

以char[]为例,分析调用char[]的instance(或者objects),选中以后,分析其incoming references,如下图所示,

技术分享图片

 

确定原因以后,分析主要是GraphBuilder类的对象占用了太多的空间。

因此,在该类中添加如下函数。

技术分享图片

函数中对类的所有成员对象赋值为空,然后再强制执行垃圾回收。

进一步:

在使用该类的地方,主动调用这个类的销毁函数,然后再一次对类整体执行回收。

技术分享图片

 

 三、解决效果

启动Eclipse,进入调试,同时Jprofiler attach到调试进程。(在Eclipse中的Jprofiler图标上点一下,就能跟踪到调试进程。)

技术分享图片

 

执行builder.finalizeItSelf()以后。

技术分享图片

 

 问题解决。说明内存得到了释放。

 

使用Jprofiler分析Java项目的内存开销情况并利用强制回收控制内存

原文:https://www.cnblogs.com/xiaojieshisilang/p/13227617.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!