`
IThead
  • 浏览: 420052 次
  • 性别: 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.lang.StackOverflowError

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

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

    java 异常总结

    java.lang.StackOverflowError 堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误。 java.lang.ThreadDeath 线程结束。当调用Thread类的stop方法时抛出该错误,用于指示线程结束。 java.lang....

    java编程常见问题

    34.java.lang.StackOverflowError 堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误。 35.java.lang.ThreadDeath 线程结束。当调用Thread类的stop方法时抛出该错误,用于指示线程结束。 36....

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

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

    weblogic安装部署以及常见问题解决

    该文档对weblogic使用过程中,包括下载,安装,部署运营过程中出现的问题进行了描述和提供了解决方法,比如1. 包引入错误... 3 2. 乱码现象... 3 3. mime-typeType配置问题....7. java.lang.StackOverflowError. 5 等等

    JsonConfigUtil

    去除死循环,解决StackOverflowError错误

    sonar-json-plugin:SonarQube JSON分析器

    SonarQube JSON分析器免责...故障排除如果JSON文件包含一些高度嵌套的对象(超过一百个嵌套级别),则您可能会遇到如下StackOverflowError : Exception in thread "main" java.lang.StackOverflowErrorat com.sonar.ss

    Java常见内存溢出异常分析

     栈溢出抛出java.lang.StackOverflowError错误,出现此种情况是因为方法运行的时候栈的深度超过了虚拟机容许的大深度所致。  出现这种情况,一般情况下是程序错误所致的,比如写了一个死递归,有可能造成此种...

    学习JVM之java内存区域与异常

    关于JVM内存区域的知识对于初学者来说其实是很重要的,了解Java内存分配的原理,这对于以后JAVA的学习会有更深刻的理解。下面来看看详细介绍。

    函数调用的基本原理

    编程中有时会遇到一个系统异常java.lang.StackOverflowError,栈溢出错误,要理解这个错误,我们需要理解函数调用的实现机制,本文就谈谈它的基本原理 ...

    JVM内存结构详解

    文章目录一、你了解JVM内存结构吗在这之前需要知道JVM内存结构图——JDK1.81.1、程序计数器1.2、虚拟机栈(JVM Stack)1.1.1、java.lang.StackOverflowError问题1.3、本地方法栈1.4、元空间(MetaSpace)1.4.1、...

    dbay-apns-for-java:适用于APNS的高性能Java客户端(Apple Push Notification Service)

    例如,有时会引发异常:java.lang.StackOverflowError。 一段时间后,该设备将无法接收通知。 然后,我使用JSTACK和JMAP查找发生了什么事情,即DEADLOCK,这导致Java-APNS不再起作用。 我必须重新启动服务才能恢复...

Global site tag (gtag.js) - Google Analytics