两段代码;
配置vm参数:-Xms1m -Xmx1m -XX:+HeapDumpOnOutOfMemoryError第一段代码:
package com.betterarrow;public class Demo {    public static void main(String[] args) {
        new Demo().increaseObject();
    }    public void increaseObject() {
        new Demo();
        increaseObject();
    }
}抛出:Exception in thread "main" java.lang.StackOverflowError第二段代码:
public class HeapOOM {
    public static void main(String[] args) {
        while (true) {
            new HeapOOM();
        }
    }
}
抛出:java.lang.OutOfMemoryError: Java heap space在我的理解,都是基于堆内存抛出的问题,为什么第一个会是java.lang.StackOverflowError而不是java.lang.OutOfMemoryError呢

解决方案 »

  1.   

    正好我刚写了一篇文章,应该能解决你的疑惑
    一张图理解JVM调优
    如果点不开的话到java123.vip首页点击文章就能看到。
      

  2.   

    StackOverflowError 是栈爆了,函数调用需要入栈出栈,自己调自己把栈空间给用完了OutOfMemoryError 是说内存没了,已经没办法给你分配内存了。
    OutOfMemoryError:JVM空间溢出,创建对象速度高于GC回收速度。并且gc后的空间不足第一个你是自己调自己,把栈调爆了,不是说jvm空间溢出了