jvm结构图与垃圾回收
2020-07-07 14:22:21 0 举报
jvm结构图
作者其他创作
大纲/内容
操作数栈
(Minor GC)
age:1
清
2
复制
指向所属方法的引用
对象
8
1
s1
堆
Eden
栈桢 method1
虚拟机栈
栈桢 method2
空间不足或过大,防止在Survivor来回复制
s0
如果s0或s1区相同年龄的对象总和大于s0或s1中空间的一半,则相同年龄或大于此年龄的对象直接进入老年代
返回值地址
2) 可达性分析,GCRoot,根对象,判断一个对象有没有到达根对象的路径。例如虚拟机栈(JVM stack)中引用的对象(准确的说是虚拟机栈中的栈帧(frames)),每个方法执行的时候,jvm都会创建一个相应的栈帧(栈帧中包括操作数栈、局部变量表、运行时常量池的引用),栈帧中包含这在方法内部使用的所有对象的引用(当然还有其他的基本类型数据),当方法执行完后,该栈帧会从虚拟机栈中弹出,这样一来,临时创建的对象的引用也就不存在了,或者说没有任何gc roots指向这些临时对象,这些对象在下一次GC时便会被回收掉方法区中类静态属性引用的对象静态属性是该类型(class)的属性,不单独属于任何实例,因此该属性自然会作为gc roots。只要这个class存在,该引用指向的对象也会一直存在。
age
动态链表
1) 引用计数法 缺点 相互引用的对象 无法被释放
age:2
方法中的局部变量
age:3
满
方法区
回收
线程独享区
线程独享1
线程独享2
3
线程独享3
线程独享4
局部变量表
age:15
age:16
1.如何判断对象是否可以被回收 ?
理解为方法执行时中间变量,以及计算后将结果置于栈顶
新生代
清除
老年代
age:35
标记-整理算法
对象头new Student()存放实例字段的值
共享数据区
类的元数据,包括类中方法的代码
5
栈桢 main()
标记
收藏
0 条评论
下一页