`
IThead
  • 浏览: 428192 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java.lang.StackOverflowError

    博客分类:
  • Java
 
阅读更多
Class A{
  A a=new A();
}

为什么会造成 java.lang.StackOverflowError 溢出 ?
我想这样的代码对于一个JAVA 程序员通常是不会写的, 但有人就是写了,没办法,而且一定要问起哦个为什么啊! 开始的时候我是想这为什么会出问题啊, 我开始从Java 的 Init 慢慢想起,也没感觉会出这样的问题,但我一想为什么不反编译一下这个代码啊,这不用了DJ反编译, 反编译出来的代码如下:

Class A{
  public A(){
     a= new A();
  }
}

你说这能不造成java.lang.StackOverflowError嘛,所以写代码我们要避免写这样的代码,应该将其放入到 方法体中(自己的Constructer除外) 或者是放入到 Static 中,以上的代码用JVM的指令,其实如下:
Code:
0:   aload_0
1:   invokespecial  #1; //Method  java/lang/object .<init>
4:   aload_0
5:   new  #2; //class A
8:   dup
9:   invokespecial  #3; //Method  java/lang/object .<init>
12: putfield    #4; //Field a:LA;
15: return

在这里  constructer 中是调用 init , 而 static 是调用 cinit , 固我们如果将自己的对象放入到 static 中是不会造成递归, 而如果将自己本身放到 constructer 中他就会不断的调用 init , 所以才发生了上面的java.lang.StackOverflowError 溢出错误.
分享到:
评论

相关推荐

    如何解决java.lang.StackOverflowError

    在Java编程中,`java.lang.StackOverflowError` 是一个常见的运行时异常,它通常发生在程序执行过程中,当Java虚拟机(JVM)的调用栈溢出时。调用栈是每个线程用来存储方法调用信息的数据结构,当递归调用过深或者...

    tomcat内存溢出解决办法,错误信息:java.lang.OutOfMemoryError:PermGen space

    tomcat内存溢出解决办法,错误信息:java.lang.OutOfMemoryError:PermGen space 参考该文档可快速解决内存溢出的问题,服务器:tomcat

    java.lang.StackOverflowError(解决方案).md

    常见的问题

    java 异常种类总结【转】.docx

    java.lang.StackOverflowError 是一种堆栈溢出错误,指的是在程序中递归调用的层次太深而导致堆栈溢出时抛出的异常。 29. java.lang.ThreadDeath 线程结束 java.lang.ThreadDeath 是一种线程结束,指的是在程序中...

    java异常类型.txt

    2. **`java.lang.StackOverflowError`** - 当程序递归过深导致栈溢出时抛出此错误。 3. **`java.lang.OutOfMemoryError`** - 当JVM无法分配更多内存时抛出此错误。 4. **`java.lang.InternalError`** - 表示JVM内部...

    java异常详解

    - **`java.lang.StackOverflowError`**:当栈溢出时抛出,通常由无限递归引起。 - **`java.lang.UnsupportedClassVersionError`**:当JVM版本不支持类文件版本时抛出。 - **`java.lang.VirtualMachineError`**:当...

    java编程常见问题

    2. **java.lang.StackOverflowError**: 当递归调用过深导致堆栈溢出时,会抛出这个错误。这通常意味着一个函数或方法在调用自身时没有正确的退出条件。优化递归结构或提高JVM的堆栈大小可以避免这个问题。 3. **...

    Java中Error与Exception的区别.doc

    java.lang.StackOverflowError java.lang.Exception java.io.IOException java.sql.SQLException java.sql.SQLSyntaxErrorException java.lang.RuntimeException java.lang.NullPointerException java.lang....

    java内存机制及异常处理

    常见的内存错误包括`java.lang.OutOfMemoryError: Heap space`(堆空间不足)、`java.lang.OutOfMemoryError: PermGen space`(方法区空间不足)和`java.lang.StackOverflowError`(栈溢出)。这些错误通常由于物理...

    Java开发常见错误及解决方案文件

    - 错误信息:编译器报错提示无法初始化pagecontext,异常为java.lang.StackOverflowError。 - 原因分析:在接口Rollable中定义的成员变量ball的引用被改变了,但接口中的成员变量默认是public static final的,即...

    Java异常大全

    - **`java.lang.StackOverflowError`**:栈溢出时抛出。 - **`java.lang.UnsupportedClassVersionError`**:类版本不受支持时抛出。 ### 异常处理策略 针对以上提到的各种异常,合理的异常处理策略非常重要。以下...

    稳定性专题 | StackOverFlowError 常见原因及解决方法

    如果某个线程的线程栈空间被耗尽,没有足够资源分配给新创建的栈帧,就会抛出 java.lang.StackOverflowError 错误。 线程栈是如何运行的? 首先给出一个简单的程序调用代码示例,如下所示: public class...

    无私奉献-jvm面试备战

    java.lang.StackOverflowError 异常的原因是 java 虚拟机栈内存溢出。解决方法是设置线程最大调用深度。参数是 -Xss。 10. java.lang.OutOfMemoryError 异常: java.lang.OutOfMemoryError 异常的原因是 java 堆...

    JsonConfigUtil

    去除死循环,解决StackOverflowError错误

    解析Java中所有错误和异常的父类java.lang.Th

    错误通常表示系统级别的问题,这些问题是程序无法恢复的,比如`OutOfMemoryError`和`StackOverflowError`。错误通常由Java虚拟机(JVM)自身抛出,开发者一般不需要捕获它们,因为这些错误表明程序运行环境出现了...

    JAVA程序员最常遇见的10个异常

    `java.lang.StackOverflowError` 当程序递归调用层次太深或方法栈空间不足时,会抛出`StackOverflowError`。这种异常通常与递归算法的设计有关,或者是由于方法内部无限循环导致的。为了避免这类异常,可以通过...

    关于java堆内存溢出的几种情况

    【情况六】:`java.lang.StackOverflowError` 这是线程栈溢出错误,通常是由于方法调用层次过深或者无限递归。解决策略包括优化程序设计,减少不必要的方法调用,或者增大线程栈大小(通过`-Xss`参数)。 总结来说...

    JAVA常见异常BUG

    **定义**: `java.lang.StackOverflowError` 表示程序栈空间耗尽,通常是由于递归调用没有正确终止条件造成的。 **示例**: 下面的代码会导致栈溢出异常: ```java public static void main(String[] args) { main...

    Core java欢迎下载

    栈溢出会导致`java.lang.StackOverflowError`。 - **Program Counter Register**:每个线程都有一个程序计数器,用于记录当前线程正在执行的字节码指令的地址。 - **Native Method Stack**:与本地方法相关,当...

Global site tag (gtag.js) - Google Analytics