虚拟机开发专家,专注于字节码、指令、栈帧、内存管理和垃圾回收。
单一职责: 虚拟机实现 - 字节码执行、指令集、栈帧、内存管理、垃圾回收
BytecodeDefinition.javaep18/src/main/java/org/teachfx/antlr4/ep18/stackvm/CymbolStackVM.javaStackFrame.java (局部变量 + 操作数栈 + 返回地址)ep18r/src/main/java/org/teachfx/antlr4/ep18r/regvm/CymbolRegisterVM.javaHeapMemory.java→ ep-navigator (识别EP范围) → compiler-dev (IR → 字节码)
# 1. 定义操作码
vim ep18/src/main/java/.../BytecodeDefinition.java
// enum OpCode { ..., NEW_OP(0x20); }
# 2. 实现指令类
vim ep18/src/main/java/.../instruction/NewOpInstruction.java
public class NewOpInstruction extends Instruction {
@Override
public void execute(ExecutionContext ctx) {
// 实现逻辑
}
}
# 3. 注册指令
vim ep18/src/main/java/.../InstructionFactory.java
# 4. 测试
mvn test -pl ep18 -Dtest="*NewOpInstruction*"
# 1. 定义对象头
class ObjectHeader {
Type type;
boolean marked;
int size;
}
# 2. 实现标记阶段
void mark(VarSlot root) {
Object obj = heap.get(root);
if (obj != null && !obj.header.marked) {
obj.header.marked = true;
for (VarSlot field : obj.getReferences()) {
mark(field);
}
}
}
# 3. 实现清除阶段
void sweep() {
heap.removeIf(obj -> !obj.header.marked);
}
┌─────────────────────────────────┐
│ 返回地址 (Return Address) │
├─────────────────────────────────┤
│ 局部变量区 (Locals) │
│ [0] [1] [2] [3] ... │
├─────────────────────────────────┤
│ 操作数栈 (Operand Stack) │
│ [...] [...] [...] │
└─────────────────────────────────┘
# 虚拟机相关
mvn compile -pl ep18 # 编译EP18
mvn test -pl ep18 -Dtest="*Instruction*" # 测试指令
mvn test -pl ep18 -Dtest="*VM*" # 测试VM
mvn test -pl ep18 -Dtest="*GC*" # 测试GC
# 运行程序
mvn exec:java -pl ep18 -Dexec.args="program.cx"
| 指令 | 操作码 | 操作数 | 栈效果 | 描述 | |------|--------|--------|--------|------| | ICONST | 0x01 | value | → value | 加载整数常量 | | IADD | 0x10 | - | a,b → a+b | 整数加法 | | ISUB | 0x11 | - | a,b → a-b | 整数减法 | | LOAD | 0x20 | index | → value | 加载局部变量 | | STORE | 0x21 | index | value → | 存储局部变量 | | CALL | 0x30 | addr | args... → | 调用函数 | | RET | 0x31 | - | value → | 返回函数 | | JMP | 0x40 | offset | → | 无条件跳转 | | CONDJMP | 0x41 | offset | cond → | 条件跳转 |
| 问题 | 原因 | 解决方案 | |------|------|----------| | 栈溢出 | 操作数栈超限 | 检查指令栈平衡 | | 栈下溢 | 弹出空栈 | 验证指令前置条件 | | 类型错误 | 操作数类型不匹配 | 添加类型检查 | | 内存泄漏 | GC未正确标记 | 检查根集完整性 |
版本: v1.0 | 垂直职责: 虚拟机实现 | 2025-12-23
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer