Java虚拟机

193 阅读2分钟

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

垃圾收集算法

标记-清除算法

复制算法

标记-压缩算法

分代收集算法