您的位置:首页 > 编程语言 > Java开发

《深入理解java虚拟机》-java堆溢出笔记

2017-04-19 23:07 134 查看
《深入理解java虚拟机》-java堆溢出笔记

本人用的idea工具来演示java堆溢出,代码如下:

import java.util.ArrayList;
import java.util.List;

/**
* Description:JAVA堆内存溢出
* Author: wangfeng
* Date: 17/4/19
* Time: 下午10:15
*/
public class HeapOOM {

static class OOMObject{

}

public static void main(String[] args) {
List<OOMObject> list = new ArrayList<OOMObject>();
while (true) {
list.add(new OOMObject());
}
}
}


IDEA设置JVM参数:



将堆最小值 -Xms参数与最大值 -Xmx参数 设置为一样大可以避免堆自动扩展,通过 参数-XX:+HeapDumpOnOutOfMemoryError 可以让虚拟机出现内存溢出异常时dump出当前的内存堆转储快照以便事后分析。

上述代码执行后会生成 .hprof文件,通过IBM HeapAnalyzer工具分析如下:



红色区域占比最高,结合代码再查问题就会容易的多。

另外书中说到内存泄露和内存溢出的问题,打个比方来区分:

内存泄露:学校有10个篮球,我不断的借,就是不还,最终会由内存泄漏造成内存溢出。

内存溢出:我要借11个篮球,可是学校只有10个,最终会造成内存溢出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java java堆 java堆溢出