laurence_cao 发表于 2013-1-24 21:16:00

诡异的JVM Crash之EXCEPTION_STACK_OVERFLOW

诡异的JVM Crash之EXCEPTION_STACK_OVERFLOW

关于JVM的一个常识是:如果对象被意外地持有很容易造成内存泄漏,而如果同时又在不停地生成新对象,就有很大的机率造成内存溢出。通常情况下,这种溢出会导致JVM抛出OutOfMemoryError,然后JVM挂起。
可是来试试下面的代码,真是让人有点诧异,分别在JDK1.4、JDK5、JDK6上都表现一致。
package crash;
public class JVMCrashTest {

    public static void main(String[] args) {
      try {
            testCrash();
      } catch (Throwable t) {
            t.printStackTrace();
            System.out.println("catch an exception! I'm dead!");
      }
    }

    /**
   * JVM挂掉,core dump
   */
    static void testCrash() {
      Object[] o = null;
      int line = 0;
      while (true) {
            o = new Object[] { o };
            line++;
            if (line % 1000 == 0) {
                System.out.println(line);
            }
      }
    }

}
没有机会抓异常,JVM直接Crash。Windows上会有hs_err日志产生,好一个EXCEPTION_STACK_OVERFLOW。Linux上面连日志都没有,直接segment fault。
页: [1]
查看完整版本: 诡异的JVM Crash之EXCEPTION_STACK_OVERFLOW