JVM
2021-12-15 09:15:48 0 举报
登录查看完整内容
JVM相关知识点图 JVM结构 类文件 类加载器 垃圾回收 适合做PPT
作者其他创作
大纲/内容
……
类型信息、域信息、方法信息
CONSTANT_String_info
创建对象的方式:new关键字、类的newInstance、构造器的newInstance、clone、反序列化
u2
描述
Interpreter(解释器)
S1
用户线程3
双精度浮点型字面量
已使用
空闲
老年代:
用户线程4
数据类型
CMS
用户线程2
1
父类索引
属性计数器
Utf8编码字符串
用户线程1
GC线程
ParNew/SerialOld
Eden
向上委托
Execution Engine(执行引擎)
常量池计数器
Mark Word
Class Pointer
Length(数组对象才有)
Instance Data
Padding
对象实例数据
CPU1
CPU2
CPU3
CPU4
garbage collector(垃圾回收器)
int
short
reference
long
field_info
老年代、标记-压缩算法、STW
constant_pool_count
CONSTANT_Float_info
方法表集合
Run-Time Constant Pool(运行时常量池)
Stack Frame(栈帧)
未使用
methods
minor_version
Initializing(初始化)
接口计数器
整型字面量
方法区
Initializing初始化
fields
抽象语法树
常量池
7
元空间(本地内存)
6
To Survivor
constant_pool
4
新生代、复制算法、STW
9
锁状态
54bit
2bit
1bit
4bit
1bit偏向锁位
2bit锁标志位
偏向锁
当前线程指针
epoch
unused
分代年龄
0 1
老年代
格式验证
魔数、版本、
语义验证
比如:是否有父类(除了Object),非抽象类中方法是否都实现了等等。
字节码验证
它试图对字节码流进行分析,并验证。比如跳转指令能否指向正确的位置;函数调用是否传递了正确的参数;变量赋值是否给了正确的数据类型等等。
符号引用验证
虚拟机会检查符号引用的类或者方法是否存在,当前类是否有权限访问。
JIT Compiler(即时编译器)
直接内存
存活
The pc Register(PC寄存器)
名称
优化器(可选)
Native Method Library(本地方法库)
Old
Concurrent Sweep
标记压缩算法
1:2
16
Operand Stacks(操作数栈)
CONSTANT_Methodref_info
句柄池
保留区域
Frame(栈帧)
对象头
2
Linking连接
对象类型数据
Loading加载
attributes_count
类中方法的符号引用
62bit
轻量级锁、自旋锁、无锁
指向线程栈中Lock Record的指针
0 0
重量级锁
指向互斥量(重量级锁)的指针
1 0
GC标记信息
CMS过程中用到的标记信息
1 1
JDK1.8
Heap(堆)
Native Method Interface(本地方法接口)(JNI)
常量池项目类型
Preparation准备
运行时常量池
浮点型字面量
Lingking(链接)
方法计数器
魔数
类索引
methods_count
SafePoint
Thread2
访问标志
Concurrent Mark/Preclean
S0
指针直接访问
Initial Mark
类或接口的符号引用
Dynamic Linking(动态链接)
JIT代码缓存
Loading(加载)
堆
…
Local Variables(局部变量)
属性表集合
方法区(概念)
指向对象实例数据的指针
指向对象类型数据的指针
10
Heap(堆)
CONSTANT_Utf8_info
pc register for thread2
字段计数器
interfaces_count
长整形字面量
线程共享
解释器
线程独享
创建对象的步骤
1.判断对象对应的类是否被加载、链接、初始化
2. 为对象分配内存
3. 初始化分配的空间
4. 设置对象的对象头
执行<init>方法
类元信息、方法元信息等
用户自定义类加载器
major_version
fields_count
Verification验证
Native (本地内存)
access_flags
15
Run-Time Data Area(运行时数据区)
attribute_info
Native Method Stacks(本地方法栈)
………………
字符串常量池
类加载器的分类
Class文件
Resolution解析
attributes
目标代码
静态变量
主版本号
指令流(可选)
constant_pool_count-1
复制算法
MinorGC(YoungGC)
字节码文件(.class)
解释执行
5
字段表集合
编译执行过程
25bit
31bit
无锁态(new)
hashcode(若调用)
0
指针碰撞
对象访问定位:句柄访问直接指针访问
magic
CONSTANT_Long_info
JVM虚拟机栈局部变量表
句柄访问
零值
byte
(byte)0
float
0.0f
(short)0
double
0.0d
char
'\\u0000'
boolean
false
null
0L
中间代码(可选)
8
实例池
CONSTANT_Fieldref_info
接口索引集合
指针
Java Virtual Machine Stacks(Java虚拟机栈)
新生代:
…………
垃圾回收器
this_class
上层类加载器加载失败交由下层类加载器加载
参数配置:-Xms:堆初始值-Xmx:堆最大值-XX:NewRatio:老年代/新生代的比例-XX:NewSize:新生代初始值-Xmn:新生代最大值-XX:SurvivorRatio:新生代中1个Eden区与1个Survivor区的大小比值-XX:MaxTenuringThreshold:设置新生代垃圾的最大年龄
Java Virtua Machine Stacks(Java虚拟机栈)
Return Address(返回地址)
-XX:+PrintFlagsInitial:查看所有参数的默认值-XX:+PrintFlagsFinal:查看所有参数的最终值打印GC的简要信息:-verbose:gc-XX:+PrintGC打印GC的详细信息:-XX:+PrintGCDetails
super_class
GC
App ClassLoader应用类加载器(系统类加载器)
生成器
以64位系统为例,MarkWord占8个字节。
Serial回收器
程序源代码
可回收
自顶向下尝试加载类
自底向上检查类是否加载
Method Area(方法区)
Bootstrap ClassLoader启动类加载器
CONSTANT_Class_info
ReMark
From Survivor
空闲列表
3
字符串类型字面量
字段的符号引用
对象布局
Thread1
u4
method_info
Extension ClassLoader扩展类加载器
CONSTANT_Double_info
CONSTANT_Integer_info
pc register for thread1
实例数据
给类变量(成员静态属性)分配内存,并赋初值(零值)。
语法分析
标记-清除算法
cp_info
Run-Time Data Area(运行时数据区)
单词流
词法分析
Serial Old回收器
填充
数量
interfaces
分配方式
类文件结构
次版本号
Class Loader Subsystem(类加载子系统)
ParNew回收器
0 条评论
回复 删除
下一页