首页 > 编程语言 > 详细

java虚拟机——垃圾回收

时间:2020-02-14 22:43:31      阅读:65      评论:0      收藏:0      [点我收藏+]

1.如何判定对象为垃圾对象

1.1引用计数法

技术分享图片

 

 

技术分享图片

1.2可达性分析

作为GCROOT的对象

  • 虚拟机栈
  • 本地方法区的类属性所引用的对象
  • 方法区中常量所引用的对象
  • 本地方法栈中引用的对象

2.如何回收

2.1回收策略

1.标记-清除算法

    通过可达性分析法标记-->清除
    缺点:效率较低、空间问题(出现很多不连续的内存空间)

2.复制算法

    把使用中的内存复制一份重新按顺序排列
    缺点:内存只能用一半,不适用于老年代

技术分享图片

 

 

    把Eden区保留的对象复制到Survivor区

3.标记-整理算法

    让所有存活的对象都向一端移动,然后清理掉边界以外的内存

4.分代收集算法

  标记整理算法和复制算法进行结合,针对新生代或者说是内存回收率较高的算法选择复制算法,对于老年代选择标记整理算法。

  • 新生代
    • Eden 伊甸园
    • Survivor 存活区
    • Tenured Gen
  • 老年代

2.2垃圾回收器

1.serial

  • 历史最悠久
  • 使用复制算法
  • 单线程,垃圾收集时必须暂停其他所有的工作线程,直到收集结束
  • 虚拟机运行在Client模式下的新生代收集器
  • 用于桌面应用

2.parnew

  • 多线程收集
  • 虚拟机运行在Server模式下首选的新生代收集器

3.parallel Scavenge收集器

  1. 适用复制算法(针对新生代内存)
  2. 多线程收集器
  3. 达到可控制的吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)
  4. -XX:MaxGCPauseMillis 垃圾收集器停顿时间
  5. -XX:GCTimeRatio 吞吐量大小 (0-100)

4.cms(Concurrent Mark Sweep)收集器

  运作步骤:
    标记清除--并发标记--重新标记--并发清除

技术分享图片

  优点

    • 并发收集
    • 低停顿

  缺点

    • 占用大量的CPU资源
    • 无法处理浮动垃圾
    • 出现Concurrent Mode Failure
    • 基于标记清除算法,会产生大料的空间碎片

5.G1

  面向服务端应用的垃圾收集器
  优势:

    1. 并行与并发, 使用多个CPU来缩短Stop-The-Word停顿时间
    2. 分代收集
    3. 空间整合:整体上看基于标记-整理算法,局部上看基于复制算法
    4. 可预测停顿

  运作步骤:

    1. 初始标记
    2. 并发标记
    3. 最终标记
    4. 筛选回收 Remembered Set

 

3.何时回收

java虚拟机——垃圾回收

原文:https://www.cnblogs.com/xinmomoyan/p/12309615.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!