JAVA垃圾回收的几点知识

7 篇文章 0 订阅
2 篇文章 0 订阅

JAVA垃圾回收的几点知识

GC Root对象

因为java垃圾回收机制都是采用可达性分析法,所以需要有根对象来作为起始点,下面是可以作为GC Root的对象:

1.虚拟机栈(栈帧中的本地变量表)中引用的对象

2.方法区中的类静态变量引用的对象

3.常量池中对象。(方法区中)

4.本地方法栈中JNI(即一般说的Native方法)中引用的对象

新生代GC(Minor GC)

采用复制算法,把eden区和survivor 0(s0,from)区的对象复制到S1区(to),然后清空eden区和s0区,调换s0和s1位置,对象年龄+1。如果to区又到达老年代标准的,需要移动到老年代。

老年代GC(Major GC)

采用标记清除算法,首先扫描一遍老年代,标记出存活的对象,然后回收无用对象。老年代装不下时会OOM。

如何新生代对象被老年代对象引用的时候不被gc

当老年代存活对象多时,每次minor gc查询老年代所有对象影响gc效率(因为gc stop-the-world),所以在老年代有一个write barrier(写屏障)来管理的card table(卡表),card table存放了所有老年代对象对新生代对象的引用。
所以每次minor gc通过查询card table来避免查询整个老年代,以此来提高gc性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值