JVM体系结构概述

JVM系列文章索引
什么是HotSpot
JVM体系结构概述
类加载机制
运行时数据区
垃圾回收机制
内存溢出故障分析
JVM调优


1 什么是JVM

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。


2 JRE/JDK/JVM是什么关系

JRE(JavaRuntimeEnvironment,Java运行环境),也就是Java平台。所有的Java 程序都要在JRE下才能运行。普通用户如果只需要运行已开发好的java程序,而不用编程开发,只安装JRE即可。

JDK(Java Development Kit),是程序开发者用来来编译、调试java程序用的开发工具包。JDK的工具也是Java程序,也需要JRE才能运行。为了保持JDK的独立性和完整性,在JDK的安装过程中,会自动另外安装一个JRE,这个JRE也是安装的一部分。所以,在JDK的安装目录下有一个名为jre的目录,存放JRE文件。

JVM(JavaVirtualMachine,Java虚拟机),是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java语言最重要的特点就是跨平台运行。使用JVM就是为了支持与操作系统无关,实现跨平台。


3 JVM的位置

JVM体系结构概述
JVM是运行在操作系统之上的,它与硬件没有直接的交互。


4 JVM的组成

JVM体系结构概述
JVM主要由以下四个部分组成:

类装载器子系统
负责加载class文件,class文件在文件开头有特定的文件标示,将class文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时数据结构。ClassLoader只负责class文件的加载,至于它是否可以运行,则由执行引擎Execution Engine决定。
类加载机制详见——

运行时数据区
分为方法区、Java栈、堆、本地方法栈、程序计数器五个部分。
运行时数据区详见——

执行引擎
解释命令,提交给操作系统执行。

本地方法接口
作用是融合不同的编程语言为Java所用,通过这个接口可以调用C语言或者其他语言实现的底层操作的方法,实现相应功能。

总结:
编译器将原代码转为.class字节码文件后,类加载器将.class文件加载入内存,而字节码文件只是一种规范,并不能直接运行,此时,由执行引擎将字节码文件翻译为底层的系统指令,交由CPU执行,这个过程会通过本地方法接口,调用本地方法库中的Native方法实现相关功能。