Java虚拟机
基本组成
类装载器子系统
- 加载
- 链接
- 初始化
运行时数据区
- 方法区:存放加载的类信息以及常量池信息
- 堆
- 虚拟机栈(线程独享)
- pc寄存器(线程独享)
执行引擎
- 解释器:保证响应时间
- JIT(即时编译器,为后端编译器):用于处理反复执行的热点代码,保证执行性能
- 垃圾回收器
JVM的生命周期
虚拟机的启动
- 通过引导类加载器创建一个初始类来完成
- 这个类由虚拟机的具体实现指定
虚拟机的执行
- 执行一个Java程序,实际上是执行一个Java虚拟机的进程。
虚拟机的退出
- 程序正常执行结束
- 程序在执行过程中遇到了异常或错误而终止
- 操作系统错误导致Java虚拟机进程终止
- 某线程调用了Runtime类或System类的exit方法,或Runtime类的halt方法
几种常见的Java虚拟机
BEA的JRockit
- 专注于服务端应用
- 不关注程序的启动速度,因此内部不包含解释器,只有JIT
IBM的J9
- 广泛用于本公司的各种Java产品
- 对自己的平台较友好
TaobaoJVM
- 创新的GCIH实现了off-heap,将生命周期教长的Java对象从heap中移到heap之外。
- 以此达到降低GC的回收频率,提升GC的回收效率。
- GCIH中的对象还能够在多个Java虚拟机进程中实现共享。