执行同一个程序, 基于 mini-jvm 的不报错, 基于 mini-jvm 的 mini-jvm 报错
970655147 opened this issue · comments
执行同一个程序, 基于 mini-jvm 的不报错, 基于 mini-jvm 的 mini-jvm 报错
master:mini-jvm jerry$ javac Test06LoadRefEachOther.java
master:mini-jvm jerry$ java -jar jvm-core/target/mini-jvm.jar -cp . Test06LoadRefEachOther
1
1
master:mini-jvm jerry$ java -jar jvm-core/target/mini-jvm.jar -jar jvm-core/target/mini-jvm.jar -cp . Test06LoadRefEachOther
java.lang.ArrayIndexOutOfBoundsException: 256
at com.gxk.jvm.instruction.AAStoreInst.execute(AAStoreInst.java:13)
at com.gxk.jvm.interpret.Interpreter.loop(Interpreter.java:119)
at com.gxk.jvm.interpret.Interpreter.doInterpret(Interpreter.java:75)
at com.gxk.jvm.interpret.Interpreter.interpret(Interpreter.java:45)
at com.gxk.jvm.VirtualMachine.run(VirtualMachine.java:74)
at com.gxk.jvm.Main.main(Main.java:23)
com/gxk/jvm/instruction/CAStoreInst.execute(CAStoreInst.java:13)
Exception in thread "main" java.lang.IllegalStateException
at com.gxk.jvm.interpret.Interpreter.loop(Interpreter.java:126)
at com.gxk.jvm.interpret.Interpreter.doInterpret(Interpreter.java:75)
at com.gxk.jvm.interpret.Interpreter.interpret(Interpreter.java:45)
at com.gxk.jvm.VirtualMachine.run(VirtualMachine.java:74)
at com.gxk.jvm.Main.main(Main.java:23)
master:mini-jvm jerry$
测试用例如下
/**
- LoadRefEachOther
- @author Jerry.X.He 970655147@qq.com
- @Version 1.0
- @Date 2020-03-08 10:58
*/
public class Test06LoadRefEachOther {
// Test06LoadRefEachOther
// refer : https://hllvm-group.iteye.com/group/topic/38847
public static void main(String[] args) {
System.out.println(Clazz1.x1);
// System.out.println(Clazz2.x1);
System.out.println(Clazz2.x2);
}
/**
- Clazz1
- @author Jerry.X.He 970655147@qq.com
- @Version 1.0
- @Date 2020-03-08 10:59
*/
private static class Clazz1 {
static int x1 = 1;
static {
x1 = Clazz2.x2;
}
}
/**
- Clazz2
- @author Jerry.X.He 970655147@qq.com
- @Version 1.0
- @Date 2020-03-08 11:00
*/
private static class Clazz2 extends Clazz1 {
static int x2 = 2;
static {
x2 = Clazz1.x1;
}
}
}