jvm 第5章 jvm 指令集和解释器
1,https://github.com/zxh0/jvmgo-book提供的源代码
package main import "fmt" import "jvmgo/ch05/classfile" import "jvmgo/ch05/instructions" import "jvmgo/ch05/instructions/base" import "jvmgo/ch05/rtda" func interpret(methodInfo *classfile.MemberInfo) { codeAttr := methodInfo.CodeAttribute() maxLocals := codeAttr.MaxLocals() maxStack := codeAttr.MaxStack() bytecode := codeAttr.Code() fmt.Printf("IMF code: %v\n",bytecode) thread := rtda.NewThread() frame := thread.NewFrame(maxLocals, maxStack) thread.PushFrame(frame) defer catchErr(frame) loop(thread, bytecode) } func catchErr(frame *rtda.Frame) { if r := recover(); r != nil { fmt.Printf("LocalVars:%v\n", frame.LocalVars()) fmt.Printf("OperandStack:%v\n", frame.OperandStack()) panic(r) } } func loop(thread *rtda.Thread, bytecode []byte) { frame := thread.PopFrame() reader := &base.BytecodeReader{} for { pc := frame.NextPC() thread.SetPC(pc) // decode reader.Reset(bytecode, pc) opcode := reader.ReadUint8() fmt.Printf("IMF opcode: %v\n",opcode) inst := instructions.NewInstruction(opcode) inst.FetchOperands(reader) frame.SetNextPC(reader.PC()) // execute fmt.Printf("pc:%2d inst:%T %v\n", pc, inst, inst) inst.Execute(frame) } }
2,写一个简单的java代码
package jvmgo.book.ch05; public class Ch05addTest { public static void main(String[] args) { int sum = 0; for (int i = 1; i
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?