深入了解JAVA虚拟机
- Java不仅是一门语言,还是一个由一系列计算机软件和规范组成的技术体系
- 优点:
- 摆脱硬件平台舒服,实现‘一次编译,到处运行的理想’
- 提供了一种相对安全的内存管理和访问机制,避免了绝大部分内存泄漏和指针越界问题
- 实现了热点代码检测和运行时编译及优化,使得Java应用能随着运行时间的增长而获得更高的性能
- 有一套完整的应用程序接口,还有无数来自商业机构和开源社区的第三方类库来帮助用户实现各种各样的功能
- JCP:Java Community Process,人们常说的Java社区,一个由业界多家技术巨头组成的社区组织,用于定义和发展Java的技术规范
- JCP官方定义的Java技术体系:
- Java程序设计语言
- 各种硬件平台上的Java虚拟机实现
- Class文件格式
- Java类库API
- 来自商业机构和开源社区的第三方Java类库
- JDK: Java Development Kit, Java程序设计语言、Java虚拟机、Java类库的统称,适用于支持Java程序开发的最小环境
- JRE: Java Runtime Environment, Java类库API中的Java SE API子集和Java虚拟机的统称,是支持Java程序运行的标准环境
- JVM虚拟机:
- Sun Classic(虚拟机始祖): 世界上第一款商用Java虚拟机,使用纯解释器方式,可外挂即时编译器,但会完全接管虚拟机执行系统,无法与解释器同时工作
- Exact VM: 它的编译执行系统已经具备现代高性能虚拟机雏形,如热点探测、两级即时编译器、编译器和解释器混合工作模式等,准确式内存管理,虚拟机可以知道内存中某个位置的数据具体是什么类型
- HotSpot VM: 准确式内存管理、热点代码探测技术,全世界使用最广泛的Java虚拟机
- Mobile/Embedded VM: 面对移动和嵌入式市场的Java虚拟机产品,在尽可能支持完整的Java SE功能的前提下向着减少内存消耗的方向优化
- BEA JRockit: 专门为服务器应用场景高度优化的虚拟机,内部不含解释器实现,全部代依靠即时编译器编译后执行,后被Oracle收购
- IBM J9 VM: 市场定位与HotSpot比较接近,在设计上全面考虑服务端、桌面应用、再到嵌入式的多用途虚拟机
- 跳过待续
- 运行时数据区域:
- 程序计数器(Program Counter Register):
- Java虚拟机栈(Java Virtual Machine Stack):
- 本地方法栈(Native Method Stack):
- Java堆(Java Heap):
- 方法区(Method Area):
- 运行时常量池(Runtime Constant Pool):
- 直接内存(Direct Memory):
