jvm
2021-04-14 15:00:56 3 举报
jvm虚拟机结构
作者其他创作
大纲/内容
共享变量3
程序计数器program counter register
共享变量1副本
类加载器Class loader(Car.class)
其他信息
共享变量3副本
Bootstrap类加载器
对象Z(1)
在经历15次轻GC后还未被销毁,就会进入老年代-XX:MaxTenuringThreshold修改这个次数
指向
对象3
From(幸存区)
父类如果没有该类,才让子类加载
Eden(伊甸园区)
Class模板对象(Car class)
销毁对象
堆
对象A(1)
GC
共享变量2
To
Heap堆(线程共享)
.....
Thread3
清除未标记的对象
Car car
jvm
栈
类加载(加载,链接,初始化)
Eden
类加载器1:虚拟机自带的类加载器2:跟类加载器3:拓展类加载器4.用户(系统)类加载器
对象5
共享变量1
通过Native调用底层C语言接口
A
运行时常量池已加载的类常量信息
........
from
......
对象2
双亲委派机制
元空间在jdk1.8之前是持久区
对象B(2)
已加载的类信息
新生代(Young Gen)
元空间(属于堆,使用本地内存,不占用堆内存)meta space
类加载器
Ext类加载器
car1car2ca3
开始加载类,先判断是否加载过该类,一层层的往上判断
main()方法
From
car1.getClass().getClassLoader().getParent().getParent()getClassLoader()获取到的是AppClassLoader(用户类加载器)第一个getParent()获取到的是ExtClassLoader (拓展类加载器)第二个getParent()获取到的是null由于跟类加载器是C/C++写的,所以获取不到 (跟类加载器)
谁空谁是To
full GC重GC
老年代
对象1
主内存
方法区占用元空间很少内存
ClassN
引用计数法
JMM
对象4
老年代(OldGen)
本地内存A
GC轻GC
getClass()
标记清除法
标记压缩法
方法区元空间(Metaspace)
java栈Stack Area
本地方法库
常量池
Meta元空间(属于堆 线程共享 不占用堆内存)
Thread2
Class1
C
硬件体系
本地方法库接口(JNI)Java Native Interface
0x14334new Car()...name=XXX
对象C(0)
每次GC,都会将Eden中的对象移动到幸存区,一旦Eden被GC后,就会是空的新生代GC操作是将Eden中不用的对象销毁之后,剩下的对象加上幸存区的From区的对象一起放到幸存区的To区中,然后To区变From,空的那个区变为To
B
Car被加载时的类信息
Applation类加载器
本地内存C
Thread1
To(幸存区)
堆Head Area
.class
Class2
堆中一定会存在垃圾,所谓的JVM调优,99%都是在堆中
元空间
本地方法栈Native Method Stack
压缩数据,防止出现内存碎片再次扫描,向一端移动未销毁的数据
本地内存B
new Car(1)new Car(2)new Car(3)
共享变量2副本
new 一个对象时发生的操作
Car.class
.java
执行引擎Excution Engine
new
地址引用
jre--jvm
0 条评论
下一页