zoukankan      html  css  js  c++  java
  • 玩坏JVM很简单--toString的递归调用

    在JVM的内存管理机制下很少发生内存溢出的情况。至少我碰见的少,好像在SSH我多次发布项目时候出现过一次。今天看见一个特简单的方法让内存溢出(好吧,我似乎作死了--!):

    1 public class InfiniteRecursion {
    2     public String toString(){
    3         return "InfiniteRecursion address : " + this + "
    " ;
    4     }
    5     public static void main(String[] args) {
    6         InfiniteRecursion demo = new InfiniteRecursion() ;
    7         System.out.println(demo.toString());
    8     }
    9 }

    上面的代码出现的问题就是toString方法的递归调用,当编译器发现一个字符串屁股后跟一个加号然后再跟一个对象,它会默认调用对象的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,来分享一下~~~

  • 相关阅读:
    继承
    redis面试题收集
    spring知识点
    jvm类加载
    jvm回收机制
    HashMap和ConcurrentHashMap
    java基础
    spring-quartz整合
    alibaba-sentinel-1.8变化
    springcloud执行流程理解图
  • 原文地址:https://www.cnblogs.com/caiyao/p/4739000.html
Copyright © 2011-2022 走看看