GC算法

作者: think91 | 来源:发表于2018-11-04 22:29 被阅读0次

1.GC概念

GC 是指在程序运行过程中对一些没用了的对象,这些对象占据内存空间, 如果不及时回收会导致内存空间占用完,导致内存溢出, 相比c和c++ 是由代码主动控制回收,java 在后台有一个垃圾回收线程在不停扫描回收。java 中GC的对象是堆空间和永久区

2.GC算法

  • 引用计数
    只要这个对象用有一个引用 , 则在对象上标记+1 ,失去引用 -1 。当为引用为0 , 则释放空间 。
    引用计数法的问题 :
    a.引用和去引用伴随加法和减法,影响性能
    b.很难处理循环引用(根本问题)
  • 标记-清除 :
    从根节点出发, 所有可达的对象标记为存活对象, 所有不可达的标记为垃圾对象, 然后清除阶段将标记为垃圾的对象清除完毕
    标记-清除.png
  • 标记-压缩:
    与标记清除不同的是, 将对象标记后, 将存活对象移动到一端 ,移动完成之后, 清除界限外的空间
    标记压缩.png
  • 复制算法 :将使用的内存分为两块, 每次只能使用其中1块 , 当进行垃圾回收时将存活对象复制到另一块去, 然后清除正在使用的内存块, 交换角色, 缺点空间浪费,不适用大对象空间回收。
    复制算法.png

eden 采用标记清除算法,将还存活的对象放入幸存区, 当大对象塞不下时直接放入老年代,幸存区经过回收还存在的对象将进入老年代


图片.png

分代思想 : 依据对象的存活周期进行分类,短命对象归为新生代,长命对象归为老年代。根据不同代的特点,选取合适的收集算法

  • 少量对象存活,适合复制算法
  • 大量对象存活,适合标记清理或者标记压缩

可触及性 : 从根节点出发能触及到这个对象
可复活的 : 在finalize()方法中可能复活该对象。
不可触及的 : 不可触及对象不可能复活, 可以回收


可触及性.png

避免使用finalize() 方法,因为gc是不确定的,操作不慎可能导致错误。

Stop-The-World :是指java中一种全局暂停的现象 ,多半是由GC 引起 ,引起原因是发生GC时要求其他线程全部停止, 等GC完成后再重新工作。

相关文章

  • chapter-4 GC算法与种类

    GC 算法与种类 ■ GC的概念■ GC算法• 引用计数法• 标记清除• 标记压缩• 复制算法■可触及性■ Sto...

  • Lua GC

    一、GC的原理及其算法设计 不同的语言,对GC算法的设计不同,常见的GC算法是引用计数和Mark-Sweep算法,...

  • GC算法基础

    英文原文:GC Algorithms: Basics译者:有孚译文地址:GC算法基础 在深入GC算法的实现细节之前...

  • java性能优化

    压测工具 基准性能数据 方面 代码算法 JVM gc算法 gc收集器

  • Android内存优化

    GC算法 当内存不足时,系统就会触发GC,GC采用垃圾标记算法为跟搜索算法 从图中可以看书obj4是科大的对象,标...

  • JVM GC算法与GC执行流程

    JVM GC算法 可达分析算法 GC执行流程 https://www.jianshu.com/p/314272e6...

  • 《垃圾回收的算法与实现》第2章GC标记-清除算法

    《垃圾回收的算法与实现》第2章GC标记-清除算法 垃圾回收系列连载: 第 1 章 学习GC之前 第 2 章 GC标...

  • HotSpot note (part-3)

    part 3 DefNew的GC属于Minor GC,使用copying算法进行垃圾收集,是Serial GC(-...

  • GC part 3

    part 3 DefNew的GC属于Minor GC,使用copying算法进行垃圾收集,是Serial GC(-...

  • 面试官,不要再问我“Java 垃圾收集器”了

    如果Java虚拟机中标记清除算法、标记整理算法、复制算法、分代算法这些属于GC收集算法中的方法论,那么“GC收集器...

网友评论

    本文标题:GC算法

    本文链接:https://www.haomeiwen.com/subject/wosdxqtx.html