Java虚拟机结构

1.Class文件格式
Java文件被编译后生成了Class文件,二进制格式,不依赖于特定的硬件和操作系统。
每一个Class文件都对应着唯一的类或者接口的定义信息。
无论任何语言只要能编译成Class文件,就可以被Java虚拟机识别并执行。
2.类的生命周期
一个Java文件被加载到JVM内存中到从内存中卸载的过程。
加载,链接(验证,准备,解析),初始化,使用,卸载。
3.类加载子系统
类加载子系统通过多种类加载器来查找和加载Class文件到JVM,JVM有两种类加载器:
(1)系统加载器
- Bootstrap ClassLoader(引导类加载器)
- Extensions ClassLoader(拓展类加载器)
- Application ClassLoader(应用程序类加载器,又叫System ClassLoader)
(2)自定义加载器
4.运行时数据区域
(1)程序计数器:确定下一条指令的地址,线程私有。
(2)JVM栈:线程私有,生命周期与线程相同,存储线程中Java方法调用的状态,包含多个栈帧。
(3)本地方法栈:用来支持Native方法。
(4)Java Heap:线程共享,存放对象实例,这些对象受垃圾收集器管理。
(5)方法区:线程共享,存储已加载的类的结构信息,是堆的逻辑组成部分。
(6)运行时常量池:方法区的一部分,存放编译期生成的字面量和符号引用,可以理解为是类或接口的常量池的运行时表现形式。
对象的创建
(1)判断对象对应的类是否加载、链接和初始化
(2)为对象分配内存
(3)处理并发安全问题
(4)初始化分配到的内存空间
(5)设置对象的对象头
(6)执行init方法进行初始化
对象的堆内存布局
对象头:Mark World,元数据指针
实例数据
对齐填充
oop-klass模型
描述Java对象实例的一种模型。
用来通过栈帧中的对象引用找到对应的对象实例。
垃圾标记算法
1.Java中的引用:强软弱虚
2.引用计数法
3.跟搜索算法
Java对象在虚拟机中的生命周期
Created--In Use--Invisible--Unreachable--Collected--Finalized--Deallocated
垃圾收集算法
标记-清除算法
复制算法
标记-压缩算法
分代收集算法