一、什么是虚拟机
- 虚拟机是一个的软件程序,它模拟物理机的功能;
- 最佳例子是计算机里的计算器, 他像物理计算器一样工作;
- 虚拟机也分物理虚拟机和软件虚拟机;
二,基于硬件的物理机
物理上的一台物理机器,我们可以在单个物理上创建多个逻辑机器, 彼此之间具有很强的隔离,这样类型的虚拟机成为物理虚拟机;基于硬件的虚拟机示例有
- linux的KVM
- VMware
- Xen
三,基于软件的虚拟机
这类虚拟机充当运行是引擎以运行特定的编程语言应用程序。基于软件的虚拟机示例有
- JVM java应用程序的运行的引擎
- PVM perl应用程序的运行的引擎
四,JVM
JVM是JRE的一部分,它负责加载和运行java文件,下图描绘了JVM的基本结构.
![](https://img.haomeiwen.com/i1951828/95936c13b2c6c074.png)
1、JVM的第一个组件是Class Loader Sub System(类加载子系统)
该系统负责加载.class文件的3个过程;
- 载入
- 链接
- 初始化
1.载入
载入意味则从硬盘(不是一定要从硬盘)读取.class文件,并在JVM的方法区内存存储响应的二进制数据;对于每个.class文件,jvm奖存储以下信息
- 完整的类名
- 直接父类的完全类名
- .class是否标识class|interface|enum
- 方法|构造函数|属性变量
- 修饰符信息
- 常量池信息
在加载类文件并存储到方法区后,JVM立即为其在堆中创建(且只创建一个)java.lang.Class对象;
2.链接
在加载完成后,JVM立即执行链接,链接行为包括
- 验证
- 准备
-
决议
java语言是安全的语言,原因就是JVM内部有个特殊组件,即Byte Code Verifier. 此字节代码校验程序负责验证.class文件的格式是否正确。如果.class文件不是由有效编译器生成的,则Byte Code Verifier会报java.lang.VerifyError. 整个过程是在验证阶段完成.
在准备阶段,JVM奖为类的静态变量分配内存和默认值;列如对于Int-->0, 对于double-->0.0,对于boolean-->false;
这里值分配默认值,并在初始化阶段分配原始值;
下个阶段是决议, 它是使用方法区区域中的原始直接引用替换成我们类中使用的所有符号引用的过程。
jvm决议3.png
对于上面的类,类加载系统加载Resolution.class, String.class, Student.class和Object.class。每个用户定义的类的父类都是Object.class。因此必须加载其父类的Object.class.这些类的名称存储在“Resolution”类的常量池中;
在决议阶段,这些名称奖替换为方法区中的实际参考.
3.初始化
在初始化活动中,对于类级别的静态变量分配原始值,静态块将由上到下执行;
类加载子系统类型有
- Bootstrap类加载器
- 扩展类加载器
- 应用程序类加载器
使用的双亲委派方式
翻译转载自 https://www.waytoeasylearn.com/2016/04/jvm-tutorial.html
网友评论