JAVA虚拟机JVM工作原理

栏目: Java · 发布时间: 5年前

内容简介:提起JAVA,都知道它有个虚拟机,因此可以跨平台,一次编写,到处运行。但具体原理是咋样的?身为JAVA小白,岂可不知!一、原理JVM实现了JAVA语言最重要的特征:平台无关性。其原理:java程序并不直接在操作系统上执行,而是由JVM执行。JVM屏蔽了与具体平台相关的信息,使得JAVA程序只需编译成适应JVM,可以在JVM上运行的目标代码(.class)就行,JVM再负责解释成具体平台的机器指令执行。同时,JVM还会进行安全检查,是java程序的安全检验引擎。

提起JAVA,都知道它有个虚拟机,因此可以跨平台,一次编写,到处运行。但具体原理是咋样的?身为 JAVA 小白,岂可不知!

一、原理

JVM实现了JAVA语言最重要的特征:平台无关性。其原理:java程序并不直接在操作系统上执行,而是由JVM执行。JVM屏蔽了与具体平台相关的信息,使得JAVA程序只需编译成适应JVM,可以在JVM上运行的目标代码(.class)就行,JVM再负责解释成具体平台的机器指令执行。同时,JVM还会进行安全检查,是java程序的安全检验引擎。

二、结构

JVM由三大部分组成:

1、类加载器
2、执行引擎
3、运行时数据区域

JAVA虚拟机JVM工作原理

1、类加载器

具体作用就是将 .class 文件加载到jvm虚拟机中去,程序就可以正确运行了。但是,jvm启动的时候,并不会一次性加载所有的 .class 文件,而是根据需要去动态加载。

类的加载过程采用双亲委派模型:

1)当前类加载器首先检查自己的加载清单,如果存在该类,则返回之;

2)如果没找到,委托父类加载器去加载;父类加载器重复动作1,递归至祖宗bootstrap ClassLoder(我靠,bootstrap,还以为是前端框架呢。bootstrap,引导之意);

3)都没有,仍然由当前类加载器加载,并纳入自己缓存中。

采用双亲委派模型,目的在于更好的保证Java平台的安全。所谓的安全,是指java的核心类被用户自己编写的类所替换。由于核心类在虚拟机初始化时就已加载,而每次加载类前先检查是否存在,所以可以避免核心类被替换。

各种类加载器:

JAVA虚拟机JVM工作原理

Bootstrap class loader: 父类

当运行 java 虚拟机时,这个类加载器被创建,它负责加载虚拟机的核心类库,如 java.lang.* 等。例如 java.lang.Object 就是由根类加载器加载的。需要注意的是,这个类加载器不是用 java 语言写的,而是用 C/C++ 写的。

Extension class loader:

这个加载器加载出了基本 API 之外的一些拓展类。

AppClass Loader(SystemAppClass):

加载应用程序和 程序员 自定义的类。

2、执行引擎

作用: 执行java编译好的字节码,或者执行本地方法

3、运行时数据区域

JVM 运行时数据区域 (JVM Runtime Area) 其实就是指 JVM 在运行期间,其对JVM内存空间的划分和分配。JVM在运行时将数据划分为6个区域来存储:

Program Counter (PC) Register:程序计数器

Java Virtual Machine Stacks:Java虚拟机栈

Heap Memory:堆内存

Method Area:方法区

Run-time Constant Pool:运行时常量池

Native Method Stacks:本地方法栈

我们写的所有程序都被加载到这里,按不同类别存放在

堆内存
Java虚拟机栈
本地方法栈
程序计数器
方法区

1)从 线程的角度 理解Java Runtime Area

a.线程私有:

程序计数器 Java虚拟机栈 本地方法栈,生命周期与线程一致;

b.线程共享:

Java堆,方法区,运行时常量池,生命周期与JVM一致。

2)从 存储内容 理解Java Runtime Area

方法区和常量池存储类的信息

堆内存存储对象信息

程序计数器,Java虚拟机栈,本地方法栈存储线程的信息


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C语言算法速查手册

C语言算法速查手册

程晓旭、耿鲁静、张海、王勇 / 2009-10 / 49.00元

《C语言算法速查手册》用C语言编写了科研和工程中最常用的166个算法,这些算法包括复数运算、多项式的计算、矩阵运算、线性代数方程组的求解、非线性方程与方程组的求解、代数插值法、数值积分法、常微分方程(组)初值问题的求解、拟合与逼近、特殊函数、极值问题、随机数产生与统计描述、查找、排序、数学变换与滤波等。同时结合这些算法列举了将近100个应用实例,对其进行验证和分析。 《C语言算法速查手册》适......一起来看看 《C语言算法速查手册》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器