JVM阅读-垃圾回收器与内存分配策略

JVM阅读-垃圾回收器与内存分配策略

计数算法:

引用计数算法 :循环引用

可达性分析算法:

image-20180815141248318

四种引用:强引用、软引用(内存溢出前回收)、弱引用(下一次垃圾回收前)、虚引用

回收机制:

  • 待回收(this=null)

  • 放入jvm低权重回收队列F-Queue,执行finalize()

  • 如果此时在此被引用,复活

  • 再次回收不再调用finalize()直接死亡

垃圾回收算法

标记清除算法

image-20180815143040811

  • 回收效率低

  • 存放片段不连续

复制算法

image-20180815143252352

  • hotspot1个Eden 2个survivor 8:1:1

标记整理算法

image-20180815143707113

分代收集算法

新生代、老年代

Hotspot算法实现

枚举根节点

  • OopMap

    安全点

安全区域

垃圾回收器

image-20180815192842098

Serial收集器

  • 单线程收集器

image-20180815192853820

ParNew收集器

  • 多线程收集器

image-20180815192922134

Parallel Scavenge收集器

  • 多线程收集器
  • “吞吐量优先级收集器”

Serial Old收集器

  • 老年代单线程收集器

Parallel Old收集器

  • 老年代多线程收集器

CMS收集器

  • 老年代收集器
  • 四个步骤:初始标记、并发标记、重新标记、并发清除
  • 标记-清理

G1收集器

  • 如果你的应用追求低停顿,那G1现在已经可以作为一个可尝试的选择,如果你的应用追求吞吐量,那G1并不会为你带来什么特别的好处
  • 标记整理

对象分配和回收策略

  • 对象优先在eden分配、
  • 大对象直接进入老年代
  • 动态对象年龄判定
  • image-20180815201055227
  • 空间分配担保