第二章:Java堆内存溢出

  • Java堆溢出
可以通过不停的创建对象来造成堆内存溢出
public static void main(String[] args) {
List list = new ArrayList<>();
while(true) {
list.add(new ObjectBIg())
}
}
 
使用-XX:+HeapDumpOnOutOfMemoryError可以在虚拟机在出现内存溢出异常时Dump出当前的内存堆转存储快照以便后续进行分析。
对Dump快照进行分析,需要区分出到底是内存泄漏Memory Leak还是内存异常Memory Overflow。
如果是内存泄漏,进一步通过工具对GC Root的引用链进行分析。
如果不是内存泄漏,就是内存中的对象确实都还必须存活,那就应该修改虚拟机参数Xmx Xms,同时判断是否可以通过调大物理内存的方式解决。然后从代码角度检测是否存在某些对象生命周期过长、持有状态时间过长的情况,尝试减少程序运行期的消耗。

猜你喜欢

转载自www.cnblogs.com/use-D/p/10618767.html