mirror of
https://github.com/FranzHaidnor/haidnorJVM.git
synced 2026-03-24 23:23:44 +08:00
update README.md
This commit is contained in:
64
README.md
64
README.md
@@ -54,6 +54,10 @@
|
|||||||
```java
|
```java
|
||||||
public class Demo5 {
|
public class Demo5 {
|
||||||
|
|
||||||
|
static {
|
||||||
|
System.out.println("Demo5 类被加载了");
|
||||||
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
String str = method1("hello world");
|
String str = method1("hello world");
|
||||||
method1(str);
|
method1(str);
|
||||||
@@ -71,11 +75,65 @@ public class Demo5 {
|
|||||||
System.out.println(s);
|
System.out.println(s);
|
||||||
return "你好 世界";
|
return "你好 世界";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
每一个 `匚` 结构图形,都表示一个 JVM 线程栈中的栈帧
|
使用 haidnorJVM 运行以上程序将会在控制台输出以下内容。每一个 `匚` 结构图形,都表示一个 JVM 线程栈中的栈帧
|
||||||

|
```cmd
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - ┌──────────────────[1] haidnor.jvm.test.demo.Demo5 | static void <clinit>()
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ 0 GETSTATIC
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ 3 LDC
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ 5 INVOKEVIRTUAL
|
||||||
|
Demo5 类被加载了
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ 8 RETURN
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - └──────────────────[1] haidnor.jvm.test.demo.Demo5 | static void <clinit>()
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - ┌──────────────────[1] haidnor.jvm.test.demo.Demo5 | public static void main(String[] args)
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ 0 LDC
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ 2 INVOKESTATIC
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ ┌──────────────────[2] haidnor.jvm.test.demo.Demo5 | public static String method1(String s)
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ 0 ALOAD_0
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ 1 INVOKESTATIC
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ ┌──────────────────[3] haidnor.jvm.test.demo.Demo5 | public static String method2(String s)
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ │ 0 ALOAD_0
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ │ 1 INVOKESTATIC
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ │ ┌──────────────────[4] haidnor.jvm.test.demo.Demo5 | public static String method3(String s)
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ │ │ 0 GETSTATIC
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ │ │ 3 ALOAD_0
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ │ │ 4 INVOKEVIRTUAL
|
||||||
|
hello world
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ │ │ 7 LDC
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ │ │ 9 ARETURN
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ │ └──────────────────[4] haidnor.jvm.test.demo.Demo5 | public static String method3(String s)
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ │ 4 ARETURN
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ └──────────────────[3] haidnor.jvm.test.demo.Demo5 | public static String method2(String s)
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ 4 ARETURN
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ └──────────────────[2] haidnor.jvm.test.demo.Demo5 | public static String method1(String s)
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ 5 ASTORE_1
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ 6 ALOAD_1
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ 7 INVOKESTATIC
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ ┌──────────────────[2] haidnor.jvm.test.demo.Demo5 | public static String method1(String s)
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ 0 ALOAD_0
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ 1 INVOKESTATIC
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ ┌──────────────────[3] haidnor.jvm.test.demo.Demo5 | public static String method2(String s)
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ │ 0 ALOAD_0
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ │ 1 INVOKESTATIC
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ │ ┌──────────────────[4] haidnor.jvm.test.demo.Demo5 | public static String method3(String s)
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ │ │ 0 GETSTATIC
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ │ │ 3 ALOAD_0
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ │ │ 4 INVOKEVIRTUAL
|
||||||
|
你好 世界
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ │ │ 7 LDC
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ │ │ 9 ARETURN
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ │ └──────────────────[4] haidnor.jvm.test.demo.Demo5 | public static String method3(String s)
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ │ 4 ARETURN
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ └──────────────────[3] haidnor.jvm.test.demo.Demo5 | public static String method2(String s)
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ │ 4 ARETURN
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ └──────────────────[2] haidnor.jvm.test.demo.Demo5 | public static String method1(String s)
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ 10 POP
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - │ 11 RETURN
|
||||||
|
[main] DEBUG haidnor.jvm.core.JavaExecutionEngine - └──────────────────[1] haidnor.jvm.test.demo.Demo5 | public static void main(String[] args)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
### 配置 rt.jar 路径
|
### 配置 rt.jar 路径
|
||||||
修改 `haidnorJVM.properties` 文件中的内容。配置 rt.jar 的绝对路径,例如`rt.jar=D:/Program Files/Java/jdk1.8.0_361/jre/lib/rt.jar`
|
修改 `haidnorJVM.properties` 文件中的内容。配置 rt.jar 的绝对路径,例如`rt.jar=D:/Program Files/Java/jdk1.8.0_361/jre/lib/rt.jar`
|
||||||
|
|||||||
@@ -90,10 +90,9 @@ public class JavaExecutionEngine {
|
|||||||
while (codeStream.available() > 0) {
|
while (codeStream.available() > 0) {
|
||||||
Instruction instruction = InstructionFactory.creatInstruction(codeStream);
|
Instruction instruction = InstructionFactory.creatInstruction(codeStream);
|
||||||
instructionMap.put(instruction.index(), instruction);
|
instructionMap.put(instruction.index(), instruction);
|
||||||
log.debug("{}│> {}", blank, instruction);
|
// log.debug("{}│> {}", blank, instruction); // debug 输出解析字节码指令的内容
|
||||||
}
|
}
|
||||||
|
// log.debug("{}├ - - - - - - - - -", blank);
|
||||||
log.debug("{}├ - - - - - - - - -", blank);
|
|
||||||
|
|
||||||
// 执行方法中的字节码指令
|
// 执行方法中的字节码指令
|
||||||
// 提示: 变量 pc 相当于程序计数器, 记录当前执行到的字节码指令的"行号"
|
// 提示: 变量 pc 相当于程序计数器, 记录当前执行到的字节码指令的"行号"
|
||||||
|
|||||||
Reference in New Issue
Block a user