JVM
2022-02-17 16:06:54 2 举报
JVM规范系统技术整理
作者其他创作
大纲/内容
GC标记
对象头
Length
Java Object
Mark Word
Class Pointer
操作压栈
老年代(2/3)
16
动态链接
Object 4
线程ID
11
方法出口
变量压栈
Hello
Array Object
MinorGC (YoungGC
对象的组成
当分代年龄15时,会被移入老年代
对象填充
1
returnAddress返回值类型
GC Roots
10
javac Hello.java
minor gc
字节码执行引擎
2
被引用对象
Object 7
padding
轻量级锁
Eden
指向栈中锁记录的指针
instance data
从软件层面屏蔽不同操作系统在底层软件与指令上的区别
Hello.class
方法区是一个 JVM 规范,永久代与元空间都是其一种实现方式
操作数栈
判定可回收的对象
JVM
锁标志位
Object 1
是否偏向锁
S0
4bit
23bit
基本类型
程序计数器
对象中的实际数据
2bit
本地方法栈
01
局部变量表
......
分代年龄
堆
空
Object 2
栈帧-hello()方法
数组对象头多一个数组的长度
main线程
15
To(1/10)
年轻代
Object 3
线程独享
栈帧-main()方法
00
指向互斥量(重量级锁)的指针
jdk1.6及之前: 有永久代,常量池1.6在方法区jdk1.7:有永久代,但是已经逐步“去永久代”,常量池1.7在堆jdk1.8及以后:无永久代,常量池1.8在元空间
java应用运行GC日志: -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:./gc.logTomcat则直接加在JAVA_OPTS变量里
对象的hashCode
25bit
对象引用
线程共享
S1
Eden(8/10)
锁状态
指向main方法调用hello方法当时程序计数器的地址
Epoch
Survivor区
iload 0
方法区(元空间)常量、静态变量、类元信息
可达性分析算法
类装载子系统
Object 5
直接内存
GC Root Set
Full gc
修改
老年代
32位长度(4b)
垃圾对象
Object 6
JAVA虚拟机栈
仍然存活的对象
1bit
java Hello.class
虚拟机栈
重量级锁
Full GC 触发包括 老年代空间不足;方法区空间满了;通过Minor GC后进入老年代的平均大小大于老年代的可用内存;System.gc()方法的调用,此方法的调用是建议JVM进行Full GC
From(1/10)
基本思想就是通过一系列的称为“GC Roots”的对象作为起点,从这些节点向下搜索,可达的对象标记为存活对象,不可达的对象为垃圾对象 GC Roots根节点: 1.虚拟机栈中局部变量表中引用的对象 2.本地方法栈中JNI中引用的对象 3.方法去中类静态变量、常量引用的对象
运行时数据区(JVM内存模型)
存放临时的操作数
0
偏向锁
无锁态
保证对象是8个字节的整数倍
0 条评论
下一页