《深入理解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个,最终会造成内存溢出。