美文网首页
垃圾回收复习

垃圾回收复习

作者: Ombres | 来源:发表于2019-05-27 21:08 被阅读0次
垃圾回收的主要就是回答以下三个问题:
1. 哪些内存需要回收?
2. 什么时候回收?
3. 如何回收?

存活判断算法

引用计数算法(Reference Counting)

最简单的一种算法,基本思路是这样的:给对象中添加一个计数器,每当有一个地方去引用它的时候,计数器加一,当引用失效时计数器减一;任何时刻计数器的值都为零的对象是不可能被引用的。

根搜索算法(GC Roots Tracing)

基本思路:通过一系列的名为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时(用树图更好理解一点就是说从GC Roots到这个对象不可达),则证明对象不可用。

在Java里,能够作为GC Roots的对象包括下面几种:

  1. 虚拟机栈(栈帧中的本地变量表)中引用的对象
  2. 方法区中的类静态属性引用对象
  3. 方法区中常量引用的对象
  4. 本地方法栈JNI引用的对象

垃圾收集算法

标记-清除算法

标记出需要回收的对象,在标记完成后统一回收掉所有的被标记对象。

缺点:效率问题和空间问题(标记清除后会产生大量的不连续内存碎片,内存碎片过多可能会导致程序需要分配较大对象时找不到足够大的连续内存空间而不得不提前触发另一次垃圾回收动作)

标记-整理算法

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

复制算法

将内存划分为大小相等的两块,每次只使用其中的一块。当这块内存用完了,就将还存活的对象复制到另一块内存上,然后把已使用过的内存空间一次清理掉。

优点:每次只对其中一块进行GC,不用考虑内存碎片的问题,并且实现简单,运行高效
缺点:内存分为两块,相当于内存缩小了一半啊。

分代回收算法

根据对象的存活周期的不同将内存划分为几块,一般就分为新生代和老年代(缺点同上),根据各个年代的特点采用不同的收集算法。新生代(少量存活)用复制算法,老年代(对象存活率高)“标记-清理”算法。

相关文章

  • 垃圾回收复习

    存活判断算法 引用计数算法(Reference Counting) 最简单的一种算法,基本思路是这样的:给对象中添...

  • 即将学习的东西!!

    Java 垃圾回收算法 复习Java基础 Android RxJava and RxAndroid Android...

  • 简单理解垃圾回收

    什么是垃圾回收? 垃圾回收的是什么? 如何判断为垃圾? 垃圾是怎样被回收的? 垃圾回收哪些区域的内存? 什么是垃圾...

  • JVM(二) GC算法与分代回收策略

    可达性分析 GCRoot场景 垃圾回收算法 分代回收策略 引用 垃圾回收 垃圾回收(Garbage Collect...

  • JVM调优之垃圾定位、垃圾回收算法、垃圾处理器对比

    谈垃圾回收器之前,要先讲讲垃圾回收算法,以及JVM对垃圾的认定策略,JVM垃圾回收器是垃圾回收算法的具体实现,了解...

  • 01垃圾回收机制

    垃圾回收(Garbage Collection,GC) 垃圾回收就是释放垃圾占用的空间 内存的动态分配和垃圾回收,...

  • Java 垃圾收集(GC)浅谈

    Java 垃圾收集(GC)浅谈 为什么需要垃圾回收?哪些内存需要回收?什么时候回收?如何回收? 为什么需要垃圾回收...

  • JVM垃圾回收机制

    JVM垃圾回收 整体思维导图 带着问题理解JVM垃圾回收机制 Java为什么需要垃圾回收机制; 回收哪部分垃圾; ...

  • 垃圾回收

    如何查看当前JVM使用的垃圾回收器? 如何指定使用CMS回收? 如何打印回收日志? 垃圾回收过程 CMS垃圾回收的...

  • JVM常见垃圾回收器介绍

    垃圾回收器简介 在新生代和老年代进行垃圾回收的时候,都是要用垃圾回收器进行回收的,不同的区域用不同的垃圾回收器。分...

网友评论

      本文标题:垃圾回收复习

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