美文网首页JVM
三、GC简介

三、GC简介

作者: 蠢小木 | 来源:发表于2022-08-18 16:41 被阅读0次

一、概念

  • Garbage Collection(垃圾回收):将无用的对象进行清理以释放空间;
  • GC的对象是JVM堆空间和永久区(1.8之后改为元空间);

二、GC算法

  • 可触及性

    • 进行垃圾回收之前需要确定哪些对象是可触及(存活)的;
      • 栈中引用的对象,因为java程序执行都是在栈中执行;
      • 方法区中静态变量引用的对象或者产量;
    • 从根对象出发,可达的对象为可触及对象;
    • 可复活:引用被释放后的对象为可复活对象;(A a = null;);
    • finalize()方法中可复活的对象,且复活的对象不可被回收,避免使用finalize()方法,用try-catch-finally代替;
  • 引用计数法

  • 当一个对象被引用一次,该对象的引用计数器就+1;当引用失效时,引用计数器-1,当一个对象的引用计数器为0时说明该对象没有被引用,即可回收;
  • 存在问题:
    • 对象被引用和去引用伴随着运算,影响效率;
    • 无法处理循环引用的问题:两个对象A、B,A中引用B,B中引用A,但A、B都已经不被根节点引用,实际上A、B均可被回收,但由于引用计数器不为0无法被回收;
  • 没有被java使用
  • 标记-清除

  • 标记:从根节点出发,标记出所有可被追寻的对象(可达对象);
  • 清除:清除所有未被标记的对象;
  • 会造成内存空间不连续;
  • 标记-压缩

  • 标记:从根节点出发,标记出所有可被追寻的对象(可达对象);
  • 压缩:将标记的对象移到内存一端,然后清空边界外的空间;
  • 适用于存活对象较多的地方,比如老年代;
  • 复制算法

  • 将内存分为两块大小完全相等的空间,每次只使用其中一块,进行回收时,将所有存活对象复制到空闲的空间中,情况原先的空间;
  • 至少浪费了一半空间;
  • 适用于新生代,因为新生代存活的对象相对较少,复制次数不多(老年代存活对象较多,几乎要复制整个内存空间);
  • 标记-复制(整合标记-压缩与复制)

  • 为解决复制算法对空间的浪费情况,整合标记-压缩与复制算法;
  • 将大对象和到达一定年龄(回收一次依然存活年龄+1)的对象移入单独的内存中(老年代),将回收次数还未达到指定年龄的对象移入空余的空间(to surivor);
  • 大对象直接放入老年代;
    • 新生代内存比老年代小,可能放不下;
    • 新生代放入大对象之后,其它小对象可能放不下;
  • 分代思想

    • 由于对象的不同特性,有些对象存活时间短,有些对象存活时间长,适用的垃圾回收算法也不同;
    • 少量对象存活的区域适合复制算法,因为要复制的对象不多;大量对象存活的区域适合标记-压缩算法;

三、stop-the-world(全局暂停)

  • 进行垃圾回收时,会暂停所有工作线程,因为工作线程会产生新的垃圾,一边回收垃圾,一边生产垃圾会导致回收不干净;
  • 全局暂停多半由GC造成;

相关文章

  • 三、GC简介

    一、概念 Garbage Collection(垃圾回收):将无用的对象进行清理以释放空间; GC的对象是JVM堆...

  • golang 垃圾回收

    垃圾回收(gc)是 golang 很重要的一部分。 GC 算法简介 三种经典的 GC 算法:引用计数(refere...

  • GC简介

    在java中,我们并不需要同使用c/c++一样仔细的管理内存的分配和释放,因为java帮我们实现了内存的回收。垃圾...

  • ipfs GC 详解

    ipfs gc 简介 GC 是garbage collection的缩写,也就是垃圾回收的意思,ipfs GC 时...

  • Go GC 简介

    简单了解 GC 与 mutator 线程并发运行,允许多个 GC 线程并行运行 在 GC 的过程中同时运行的 G ...

  • GC 算法简介

    GC 的概念Garbage Collection 垃圾收集1960年 List 使用了 GCJava 中,GC 的...

  • Ⅳ.GC

    1.GC简介 GC,又称YGC,只针对新生代的GC;FGC,GC后不满足对象存储会发生FGC,针对新生代,养老代,...

  • 白话JVM GC-GC算法简介

    什么是JVM JVM是个程序,象是句屁话,对就是句屁话!但这句屁话揭示了真理!“算法+数据结构=程序”注:凭借一句...

  • JAVA GC算法简介

    GC是java语言对回收不在继续使用的内存空间进行回收的程序流程的一个简介。 所以说GC 总共需要做以下的几件事情...

  • 几种常见GC简介

    在springboot-admin当中,大概会有以下几种类型的gc出现,本文我们看看他们分别是什么意思。 本文使用...

网友评论

    本文标题:三、GC简介

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