关于如何编写Java程序使jvm崩溃
如下一个简单的程序:
我将堆内存调了一下,便于它发生异常:-Xms5M -Xmx5M
1 package jvm; 2 3 public class Crash { 4 public static void main(String[] args) { 5 6 //Object[] o = {“abc”};初始值赋值,不会有影响。 7 Object[] o = null; 8 9 while (true) { 10 o = new Object[] { o }; 11 //输出的话,jvm会很长时间才崩溃。 12 //System.out.println(o); 13 } 14 } 15 }
我的问题是,为什么这个这个程序有没有添加这个打印语句,相差那么大呢?
如果没有添加,那么程序马上报异常,而如果添加了,则要过一段时间才会报异常,区别明显。为什么呢?
因为输出打印属于IO事件,每次输出CPU都会中断,IO是很耗时的,所以感觉上时间会延长。