Java虚拟机规范中规定了虚拟机必须遵守一些规则,只要符合这些规范,其实现可以完全不同。例如有Oracle官方的Hotspot,IBM的Jikes,Google的安卓虚拟机。这些虚拟机有各自的架构,本文以Hotspot为例介绍虚拟机各个组成部分。
整体架构:
典型的虚拟机架构如下图所示:
主要组件包括:类加载子系统、含有垃圾回收的内存系统、仿真引擎(或者成为执行引擎)
各部分简介
1. 类加载子系统(Class Loaders)
类加载器把含有元数据和指令的类文件(.class,可以是存储在本地的文件,也可以来自网络的二进制流)转化为一个依赖于实现的内存映像。具体步骤大致如下:
首先将二进制类载入内存,接着执行一些一致性检查,例如魔数,版本号等等Class文件中的内容。在程序被验证为正确结构之后,解析指令并初始化内存(此内存模型符合虚拟机的具体实现),初始化之后将控制传给执行引擎。
2. 内存和状态寄存器
内存由一个程序代码区(方法区)、一个全局内存区(堆)、一个结构化的Java栈、一个本地方法栈组成。
方法区是线程共享的内存区域,用于存放类信息、常量、静态变量、即时编译后的代码等等。
堆用于存放程序创建的所有对象和数组,线程共享。这是回收期工作的主要对象。
Java栈为线程私有,存储局部变量、操作数栈、动态链接、方法出口等等。
本地方法栈则是为虚拟机调用本地方法服务的。
与内存相关的两个重要寄存器是PCs和栈指针。其中,程序计数器指向下一条要执行的指令(存放于方法区中),只能通过PCs来访问程序内存。栈指针指向Java栈的栈顶,用来访问栈中的内容。
3. 垃圾回收器(Garbage Collector)
当程序不再需要使用Java对象时,这些对象就成为了垃圾。虽然虚拟机规范中对于栈大小没有明确规定,但是实际的虚拟机实现内存都是有限的,因此必须回收垃圾以便可以重新使用内存。垃圾回收器就是负责找出不需要的对象,将其回收。
4. 执行引擎
仿真引擎有本地方法接口和寄存器支持,负责仿真Java字节码指令,可以是简单的解释器,也可以是编译器编译成主机指令。也可以将两者结合来实现高性能虚拟机,检查到热点之后翻译成本地指令保存在代码cache中。
5. 本地方法接口
虚拟机使用一组标准库来访问由操作系统管理的(operating system-managed)功能。例如,利用这些库执行文件I/O等等。这些标准可有些事用Java写的,有些则使用本地代码(如C),许多对操作系统的调用是通过本地方法来完成的。在JDK中可以找到这一些本地代码。
说明:
虚拟机的内容非常繁多而且复杂,这些文章都比较零散,等对虚拟机掌握得比较透彻之后,再总结一些比较系统的知识。
分享到:
相关推荐
《Java核心技术系列:Java虚拟机规范(Java SE 8版)》完整而准确地阐释了Java虚拟机各方面的细节,围绕Java虚拟机整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对Java虚拟机进行全面而...
Java虚拟机规范 Java SE 8版-带目录-pdf,本书完整而准确地阐释了Java虚拟机各方面的细节,围绕Java虚拟机整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对Java虚拟机进行全面而深入的分析...
第2章:概览Java虚拟机整体架构; 第3章:介绍如何将Java语言编写的程序转换为虚拟机指令集; 第4章:定义class文件格式。它是一种与硬件和操作系统无关的二进制格式,用来表示编译后的类和接口; 第5章:定义了...
周志明是远光软件的平台架构师,著有《深入理解Java虚拟机:JVM高级特性与最佳实践》,并且在翻译工作中负责全文统稿以及前言和部分章节的翻译校审。吴璞渊就职于西门子,专注于程序和工作流设计,并在翻译工作中...
### Java虚拟机规范(JVM)概览 #### 核心概念与重要性 《Java虚拟机规范(JavaSE7版)》是理解Java虚拟机(JVM)运作机制的基石,由Tim Lindholm、Frank Yellin、Gilad Bracha和Alex Buckley等人撰写,后由周志明、...
第2章概述Java虚拟机的整体架构,包括class文件格式、数据类型、原始类型、引用类型、运行时数据区、栈帧、浮点算法、异常等,这对理解本书后面的内容有重要帮助;第3章详述如何将Java语言编写的程序转换为Java...
本书完整而准确地阐释了Java虚拟机各方面的细节,围绕Java虚拟机整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对Java虚拟机进行全面而深入的分析,深刻揭示Java虚拟机的工作原理。...
作为一位资深的软件架构师,他著有《深入理解Java虚拟机:JVM高级特性与最佳实践》一书。 - **吴璞渊**:负责第3章及第4章的1至7节翻译工作。他在西门子任职,专注于程序设计和工作流技术。 - **冶秀刚**:负责第5章...
第1~~3章介绍了Java虚拟机的定义、总体架构、常用配置参数。第4~~5章介绍了垃圾回收的算法和各种垃圾回收器。第6章介绍了虚拟机的性能监控和故障诊断工具。第7章详细介绍了对Java堆的分析方法和案例。第8章介绍了...
第2章概览了Java虚拟机整体架构,包括class文件格式、数据类型、原始类型、引用类型、运行时数据区、栈帧、浮点算法、异常等,这对理解本书后面的内容有重要帮助。第3章详述如何将Java语言编写的程序转换为Java...
MiniJavaVM—个Java虚拟机的设计和实现 在本篇文章中,我们将详细介绍 MiniJavaVM 的设计和实现,包括其总体架构、功能、运行环境和开发工具,以及具体的实现步骤。 第一章绪论 Java 虚拟机(Java Virtual ...
《Java虚拟机规范(Java SE 8版)英文版》全面而准确地阐释了Java虚拟机各方面的细节,围绕Java虚拟机整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对Java虚拟机进行全面而深入的分析,...
《Java核心技术系列:Java虚拟机规范(Java SE 8版)》完整而准确地阐释了Java虚拟机各方面的细节,围绕Java虚拟机整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对Java虚拟机进行全面而...
《Java虚拟机规范(Java SE7版)》由林德霍尔姆著,本书完整而准确地阐释了Java虚拟机各方面的细节,围绕.Java虚拟机整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对Java虚拟机进行全面而...
随着越来越多的第三方语言(Groovy、Scala、JRuby等)在Java虚拟机上运行,..., 《实战Java虚拟机——JVM故障诊断与性能优化》不仅适合Java程序员,还适合任何一名工作于Java虚拟机之上的研发人员、软件设计师、架构师
周志明是远光软件平台开发部部门经理及平台架构师,著有《深入理解Java虚拟机:JVM高级特性与最佳实践》,专注于Java应用和虚拟机技术。吴璞渊就职于西门子,偏好程序设计和工作流,喜欢探索Java新技术。冶秀刚是...