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工具,导入刚才的快照

具体的学习使用 后边继续记录。

posted @ 2018-07-26 14:49  smokerBig  阅读(78)  评论(0)    收藏  举报