OpenJDK垃圾收集器与内存分配策略

本文详细介绍了OpenJDK中的垃圾收集器,包括引用计数和可达性分析两种确定回收目标的方法,以及不同阶段的回收时机。讨论了多种垃圾收集算法,如标记-清除、复制、标记整理和分代收集。还涵盖了各种垃圾收集器的特点,如Serial、Parallel Scavenge、ParNew、Serial Old、Parallel Old和CMS,并分析了它们的目标和适用场景。此外,文章还讨论了内存分配策略,如对象优先在Eden分配、大对象直接进入老年代等,并提到了并发模式失败和浮动垃圾的问题。
摘要由CSDN通过智能技术生成

OpenJDK垃圾收集器与内存分配策略

确定回收目标的方法

  • 引用计数算法
  • 可达性分析算法
    1.基本思想:通过一系列的称为”GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连(用图论的话来说,就是从GC Roots到这个对象不可达)时,则证明此对象是不可用的。
    2.Java语言中,可作为GC Roots的对象包括下面几种:
    虚拟机栈(栈帧中的变量表)中引用的对象。
    方法区中类静态属性引用的对象
    方法区中常量引用的对象
    本地方法栈中引用的对象

回收时机

一个对象死亡,至少经历2次标记过程。在可达性分析后没有与GC Roots相链接的引用链,被第一次标记,并被加入F-Queue的队列中,进行第二次标记时,如果目标对象覆盖了finalize()方法且没有执行过,则会执行该方法,如果在finalize()方法中this被关联到GC Roots时则可免于回收,否则被回收。

垃圾收集算法

1.标记-清除算法
2.复制算法
3.标记整理算法
4.分代收集算法

垃圾收集器

1.Serial收集器
- 串行收集器,单线程,
- Client模式下的默认新生代收集器
- 适合单CPU上的简单应用

2.Parallel Scavenge
- 并行的多线程收集器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值