使用Jprofiler分析Java项目的内存开销情况并利用强制回收控制内存
一、问题背景
自己开发的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()以后。
问题解决。说明内存得到了释放。
你永远不知道未来会有什么,做好当下。技术改变世界,欢迎交流。