在JVM的內存管理機制下很少發生內存溢出的情況。至少我碰見的少,好像在SSH我多次發布項目時候出現過一次。今天看見一個特簡單的方法讓內存溢出(好吧,我似乎作死了--!):
1 public class InfiniteRecursion {2 public String toString(){3 return "InfiniteRecursion address : " + this + "/n" ;4 }5 public static void main(String[] args) {6 InfiniteRecursion demo = new InfiniteRecursion() ;7 System.out.PRintln(demo.toString());8 }9 }上面的代碼出現的問題就是toString方法的遞歸調用,當編譯器發現一個字符串屁股后跟一個加號然后再跟一個對象,它會默認將對象轉換成String,方法就是調用對象的toString方法(注:java對象一定有toString方法),然后這里就無限的遞歸了。
Exception in thread "main" java.lang.StackOverflowError at java.lang.AbstractStringBuilder.<init>(AbstractStringBuilder.java:63) at java.lang.StringBuilder.<init>(StringBuilder.java:109) at test.InfiniteRecursion.toString(InfiniteRecursion.java:6) at java.lang.String.valueOf(String.java:2854) at java.lang.StringBuilder.append(StringBuilder.java:128) at test.InfiniteRecursion.toString(InfiniteRecursion.java:6)
.......
大家有什么奇技淫巧玩壞JVM,來分享一下~~~
新聞熱點
疑難解答