JVM的整体结构
HotSpot VM是目前市面上高性能虚拟机的代表作之一,它采用解释器与即时编译器并存的架构
Java编译器输入的指令流基本上是一种基于栈的指令架构,另外一种指令集架构则是基于寄存器的指令集架构。
一、指令集构建
同样执行2+3这样的逻辑操作,其2指令分别如下:
1.基于栈的计算流程
public class StackStruTest {
public static void main(String[] args) {
int i=2;
int j=3;
int k=i+j;
}
}
然后进行反编译
这里有个改正,我们进行反编译的语句应该为:javap -v 要反编译的文件(在上面对应的是StackStruTest.class)
和dos命令窗下一样,先找到代码路径,然后
2.基于寄存器的计算流程
mov eax, 2 //将eax寄存器的值设为1
add eax,3 // 使eax寄存器的值加3
栈:
跨平台性、指令集小、指令多;执行性能比寄存器差
二、JVM的生命周期
- 虚拟机的启动
通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类就是由虚拟机的具体实现指定的 - 虚拟机的执行
执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程 - 虚拟机的退出
有如下几种情况:
程序正常执行结束
程序在执行过程中遇到了异常或者错误而异常中止
由于操作系统出现错误而导致Java虚拟机进程中止
由于线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作
除此之外,JNI(Java native interface)规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机的退出情况