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

一、问题背景

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

二、解决过程

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

18505cb774f3b25223f350dc354cf66b.png

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

546e04ddbf656bd3588bcc5112c7926d.png

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

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

c6950388e87b9ebce47db333c933d38d.png

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

进一步:

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

8b44fbb7a1fb5113d581dd343854e7fe.png

三、解决效果

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

2103197f5bfa5fa69d538000cfef0b94.png

执行builder.finalizeItSelf()以后。

b87c7a9479c5995bbd9c574eef36beb0.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值