JVM初体验:内存溢出问题分析
简单例子新建java项目 写一个死循环程序,我们都知道最后会出现内存溢出的现象
public static void main(String[] args) { List<Demo> list = new ArrayList<Demo>(); while (true) { list.add(new Demo()); } }
设置VM 参数:
-XX:+HeapDumpOnOutOfMemoryError JVM会在遇到OutOfMemoryError时拍摄一个“堆转储快照”,并将其保存在一个文件中。
-Xms 初始堆大小,默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制
-Xmx 最大堆大小 默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制.
注意:此处的大小是(eden+ 2 survivor space).与jmap -heap中显示的New gen是不同的。
整个堆大小=年轻代大小 + 年老代大小 + 持久代大小.
-XX:HeapDumpPath 输出到指定位置
上面代码设置的VM参数(-XX:+HeapDumpOnOutOfMemoryError -Xms20m -Xmx20m -XX:HeapDumpPath=d:/a.dump)

打开Eclipse Memory Analyzer工具,导入刚才的快照

具体的学习使用 后边继续记录。
浙公网安备 33010602011771号