美文网首页
JVM之垃圾收集算法

JVM之垃圾收集算法

作者: Skybike | 来源:发表于2019-10-08 17:08 被阅读0次

在判断哪些对象已经是死掉的之后,就可以开始使用垃圾回收算法进行垃圾回收内存空间了

丢掉垃圾,省出内存给新对象使用

当然,在这些之前,触发的条件是某块虚拟机内存区域已经装不下新创建的对象了。

标记--清除算法

前提(没有跟GC ROOT相关联的对象并不会被立即回收,会经历两次回收动作,第一次会被打上标记(对象没有覆盖finalize()方法,或者finalize方法已经被虚拟机调用过),第二次会被回收)

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

缺点:一是效率问题,标记和清除两个过程的效率都不高

另一个是空间问题,标记清除之后会产生大量不连续的内存碎片,内存碎片太多可能会导致以后需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾回收动作

复制算法:

将内存按容量划分为大小相同的两块,每次只是使用其中的一块,当这块的内存用完了,就将还存活着的对象复制到另一块上去,然后再把已使用过的内存空间一次清理掉,然后吧剩余的不回收的内存块,移动堆顶指针按顺序分配内存。

缺点在于每次就只用一半的内存。

应用场景:

新生代中98%的对象都会很快的回收掉,所以并不需要按照1:1的比例来划分内存空间,新生代分为eden区,survivor一区,survivor二区,比例是8:1:1,当回收时,需要将eden区和一区的对象进行回收,然后放到二区中。如果,万一说,回收后存活的量大于10%,那么多余的将会放到老年区。

标记--整理算法

复制算法存在大量的复制操作,而且,如果存在极端情况比如所有的对象都不需要回收,或者90%以上的对象都不需要回收,那么就需要有额外的空间来提供担保空间针对老年代的回收。

标记整理算法是先将需要回收的对象进行标记,把不需要回收的对象向一端移动,然后清理掉边界以外的内存。

分代收集算法:

对新生代的区域,使用复制算法只需要付出少量存活对象的复制成本就可以完成收集。

对于老年代的收集,因为存活率高,没有额外的担保空间,就必须使用标记-清理或者标记-整理算法

相关文章

  • Jvm之CMS垃圾收集器

      这篇文章主要介绍JVM的CMS垃圾收集器,以及JVM提供的垃圾收集算法。 一、垃圾收集算法   JVM提供的三...

  • JVM学习笔记(3)-垃圾收集算法

    JVM学习笔记(1)-内存管理机制 JVM学习笔记(2)-内存分配与回收 垃圾收集算法 JVM垃圾收集算法有四种:...

  • 常见面试题

    JVM JVM 内存结构 垃圾收集策略与算法记回收,标记清除,复制算法 HotSpot 垃圾收集器 cms hos...

  • JVM源码分析系列

    JVM G1算法系列 G1垃圾收集器介绍 G1垃圾收集器之RSet G1垃圾收集器之SATB G1垃圾收集器之对象...

  • JVM Hostspot虚拟机

    jvm HotSpot 虚拟机垃圾收集器、收集算法、收集过程

  • 面试官:谈谈你对JVM垃圾收集器的了解

    本文默认JVM为HotSpot。之前已经介绍过常见的垃圾收集算法,这次再来说说JVM具体实现了这些算法的垃圾收集器...

  • 2020互联网Java后端面试专题解析—JVM21题

    前言 文章对 JVM 内存区域分布、JVM 内存溢出分析、JVM 垃圾回收算法/垃圾收集器、JVM 性能调优工具及...

  • JVM之垃圾收集算法

    在判断哪些对象已经是死掉的之后,就可以开始使用垃圾回收算法进行垃圾回收内存空间了 丢掉垃圾,省出内存给新对象使用 ...

  • JVM之垃圾收集算法

    背景:看完《深入理解Java虚拟机》和相关博客,对JVM还是没有一个条理清晰的认识,遂提取了书中相关知识点和参考相...

  • JVM第二弹

    JVM第二弹 GC分代收集算法VS分区收集算法 分代收集算法 当前主流的VM垃圾收集都采用“分代收集“算法,这种算...

网友评论

      本文标题:JVM之垃圾收集算法

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