1. 程式人生 > >java自己寫的一個小程式

java自己寫的一個小程式

  今天在書上看到一個作者提出一個問題"怎樣通過編寫Java程式碼讓Jvm崩潰",我看了之後也不懂。帶著問題查了一下,百度知道里面有這樣一個答案:

  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 }

  程式執行十幾秒之後,控制檯會出現這樣的錯誤:

  Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

  at jvm.Crash.main(Crash.java:10)

  很明顯,超出記憶體空間錯誤。

  我將原程式隨意改了一下,如賦初始值等,對程式無影響。

  可是我將死迴圈中的o輸出在控制檯的時候,jvm居然一直都不崩,為什麼輸出的話,就不會超出記憶體空間呢?

  我看來,原程式能夠使Jvm崩潰,是因為死迴圈中,通過舊物件,不斷創建出新的物件,即創造的物件是互相引用的,所以GC是不會回收它們的,造成堆疊溢位。