java数组为空崩溃

Python013

java数组为空崩溃,第1张

java数组为空崩溃

我有一个对象数组-本质上是一个对象引用数组。在我所引用的类中,还有另一个引用。我需要初始化此数据结构,但在初始化期间会崩溃。我正在尝试在引用的类中初始化引用,但是它始终为null,因此有些Java“东西”我还不了解。这似乎很简单,但却令人沮丧。这是一个简单的问题示例:

public class ref1

{

public int myInt

}

public class ref2

{

public ref1 myRef

}

public ref2 buffer[]

int i

// Code to initialize the above data structures:

buffer = new ref2[255]

for (i=0i<255i++)

{

buffer[i] = new ref2()

buffer[i].myRef = new ref1() // (1) ALWAYS returns null????

}

最终,上面的代码将在我具有(1)标记的行上崩溃,并带有“ ArrayOutOfBoundsException”。我在调试器中注意到的第二件事是myRef始终设置为null。为什么无法创建和引用ref1对象?

如果我注释掉标有(1)的行,则没有异常陷阱,因此问题就在那里。

pcl2java版本过高导致崩溃。

1、尝试重新安装fabric或Minecraft本体,报了找不到类的指针。

2、在PCL2启动器使用java11启动。PCL2主要是受正极活性物质的影响,正极的导电性限制了电池容量。

网上有这样一套编码,能使java虚拟机崩溃:packagejvmpublicclassCrash{publicstaticvoidmain(String[]args){//Object[]o={“abc”}初始值赋值,不会有影响。Object[]o=nullwhile(true){o=newObject[]{o}//输出的话,jvm就不会崩溃。//System.out.println(o)}}}程序运行十几秒之后,控制台会出现这样的错误:Exceptioninthread"main"java.lang.OutOfMemoryError:Javaheapspaceatjvm.Crash.main(Crash.java:10)很明显,超出内存空间错误。我将原程序随意改了一下,如赋初始值等,对程序无影响。可是我将死循环中的o输出在控制台的时候,jvm居然一直都不崩,为什么输出的话,就不会超出内存空间呢?我看来,原程序能够使Jvm崩溃,是因为死循环中,通过旧对象,不断创建出新的对象,即创造的对象是互相引用的,所以GC是不会回收它们的,造成堆栈溢出。仿照这个例子,我写了一个简单的类,模仿例子程序中的数组,如下:packagejvmpublicclassMyCrash{publicstaticvoidmain(String[]args){JvmBeanj=nullwhile(true){j=newJvmBean(j)//无论输出不输出,jvm都会崩溃//System.out.println(j)}}}结果便是控制台输出如下的错误:Exceptioninthread"main"java.lang.StackOverflowErroratjvm.JvmBean.(JvmBean.java:5)atjvm.JvmBean.(JvmBean.java:5)atjvm.JvmBean.(JvmBean.java:5)atjvm.JvmBean.(JvmBean.java:5)atjvm.JvmBean.(JvmBean.java:5)一长串的"atjvm.JvmBean.(JvmBean.java:5)",后面的被省略了。结果看来,同样也造成了jvm崩溃,可是错误类型跟例子程序的不同,说堆栈溢出错误,并且无论是否输出,错误都一样发生,为什么呢?结论第一个异常Exceptioninthread"main"java.lang.OutOfMemoryError:Javaheapspaceatjvm.Crash.main(Crash.java:10)是因为程序无法申请到足够的内存的时候抛出的异常,Object数组o不断指向新的Object数组,数组元素是原来的Object数组,这使得Object维数越来越高。不断申请内存空间,最终导致超出jvm中堆的最大值。堆内存溢出。为什么输出打印,时间会延长呢?!输出打印的话,虚拟机并不是不会崩溃,而是崩溃的时间大大延长了。而崩溃时间延长其实是假象,是因为输出属于IO事件,每次输出CPU都被中断,IO很耗时,所以,感觉上才会时间延长。第二个异常”类内部的静态属性>静态块>对象属性>构造方法。注意这一点,那就是说bean属性会先于JvmBean的构造函数被初始化。在main函数中,new一个JvmBean的构造函数之前,类内部的JvmBean对象要优先被初始化,这个类内部的属性bean的内部同样也包含了一个JvmBean对象需要被初始化,成循环调用,造成了栈溢出。”所以异常才会是这个——Exceptioninthread"main"java.lang.StackOverflowError