在开始分析 class 字节码前我们先补一补一些基础知识, 帮助我们更好地了解 jvm 是如何执行字节码的. 大家可能都知道 JVM 是操作栈,
CLR 常用简写词语, CLR 是公共语言运行库 (Common Language Runtime) 和 Java 虚拟机一样也是一个运行时环境, 它负责资源管理(内存管理和垃圾收集等), 并保证应用和底层操作系统之间必要的分离. CLR 存在两种不同的翻译名称: 公共语言运行库和公共语言运行时.
栈虚拟机
操作数栈持有操作数
操作数可以入栈或出栈进行操作
栈的大小是由每一个方法显式确定的
- public class HelloWorld {
- public static void main(String[] args) {
- System.out.println("hello world");
- }
- }
这里我们写一个简单的 HelloWorld 代码, 执行效果是在控制台输出 hello world
执行顺序
我们用查看字节码工具来看一下, main 方法执行那些指令将我们 hello world 进行输出, 这里大家只是简单了解就行, 随后给大家分享如何查看和分析字节码.
操作符执行栈
首先将 System.out.Print 压入栈
然后将字符串 "hello world" 入栈
invokevitual 调用将调用 print 命令将 hello world 进行输出.
基本操作
基本操作符
这些操作完成对栈进行操作. JVM 是一个基于栈的虚拟机.
来源: http://www.jianshu.com/p/2ca22d7a62c1