一、垃圾回收算法

1、标记—清除算法

1)工作流程

算法分为“标记”和“清除”阶段:首先标记出所有需要回收的对象(标记阶段),在标记完成后统一回收所有被标记的对象(回收阶段)。

2)缺点

a. 效率问题:标记和清除这两个过程的效率都不高。

b. 空间问题:会产生大量的不连续碎片。

2、复制算法(新生代垃圾回收算法)

1)工作流程

将内存划分为大小相等的两块,每块只使用其中的一块,另外一块作为保留区域,当进行垃圾回收时,将使用区域的存活对象一次性进行赋值到保留区域,而后一次性清空使用区域。

2)使用场景

新生代垃圾回收,新生代对象具有朝生夕灭的特性(新生代对象存活率低)。

3)优点:实现简单,运行效率高,无空间碎片问题。

4)JVM采用的复制算法:

将内存划分(新生代内存)为一块较大的Eden区域和两块大小相等、空间较小的Survivor区域(Eden:Survivor = 8:1)。

每次使用Eden和其中的一块Survivor区域(第一块Survivor区域为from区域,另外一块为to区域)。

在进行垃圾回收时(Eden区域快满时,系统自动触发垃圾回收)

A. 第一次进行GC时,将Eden区中的对象移动到from区域。

B. 第二次再进行GC时,将Eden区和from区中存活的对象移动到to区域,然后一次性清除掉Eden和from区,以此循环。

C. 对象在from区域和to区域来回移动15次(默认),将对象移动到老年代。

D. 特殊情况:当Survivor区域放不下存活对象时,会从老年代进行分配担保。

3、标记整理算法(老年代回收算法)

复制算法在对象存活率比较高的情况下,会有大量对象复制操作,效率很低,因此,老年代不采用复制算法。

1)工作流程:

标记阶段和标记清除阶段的标记类似,标记出无用对象。

整理阶段:将存活对象向一端移动,而后一次性将存活对象边界以外的空间清除掉。

4、分代回收算法

Java采用分代回收算法,即新生代采用复制算法,而老年代采用标记整理算法。

将内存划分为新生代(对象存活率低)和老年代(对象存活率高)。

面试考点:请问了解Minor GC和Major GC吗?

Minor GC:新生代GC,指的是新生代垃圾回收,在新生代中,对象大多数朝生夕灭,因此采用复制算法,Major GC发生频繁,效率较高,

Major GC (老年代GC/Full GC):指的是发生在老年代的垃圾回收,发生Full GC通常会至少发生一次Minor GC,但并非绝对,Full GC 速度比Minor G从速度慢10倍以上,发生频率较低。

二、垃圾回收器

并行:指的是多条垃圾回收线程并行工作,而用户线程等待。

并发:用户线程与垃圾回收线程同时执行(不一定并行,可能交替执行),用户线程继续执行,垃圾回收线程运行在另外的内核中。

吞吐量:CPU运行用户代码时间/CPU总时间

CPU总时间即用户代码时间+垃圾回收时间

新生代垃圾回收器:Serial、ParNew、Parallel scavenge

老年代垃圾回收器:SeralOld、ParallelOld、CMS

全区域垃圾回收器:G1

1、Serial收集器(新生代垃圾回收,串行收集器)

(1)特性:Serial是一个单线程收集器,在Serial进行垃圾收集时,必须暂停其他所有的工作线程,直到Serial收集器手机结束(STW)。

(2)应用场景:Serial收集器是JVM运行在Client模式下默认的新生代收集器。

(3)优点:简单而高效,对于单核CPU,Serial收集器由于没有线程交互开销,可以获得最高的单线程收集效率。

2、ParNew收集器(新生代收集器,并行GC)

(1)特性:ParNew收集器是Serial收集器的多线程版本。

(2)应用场景:PerNew是许多运行在Serial模式下的JVM首选新生代收集器。

(3)优点:随着可使用CPU数量的增加,对于GC时系统资源的利用有较大帮助。

3、Parallel Scavenge 收集器(吞吐量有限收集器,新生代收集器,并行GC)

(1)特性:吞吐量

两个参数控制吞吐量:

a. .-xx:MaxGCPauseMillis:控制最大垃圾收集器停顿时间。

b. .-xx:GCRatio:直接设置吞吐量大小

(2)应用场景:高吞吐量场景,适合需要与用户交互的程序(B/S架构),良好的响应速度提升用户体验。

(3)优点:与ParNew收集器比较:高吞吐量。

GC自调节策略(-xx:+UseAdaptiveSizePolicy)

4、Serial Old收集器(老年代收集器,并行GC)

(1)特性:Serial Old是Serial老年代版本,单线程收集器,实用标记整理算法。

(2)应用场景:

1)Client模式下:Serial Old主要也在于给Client模式下的虚拟机使用。

2)Server模式下:作为CMS收集器的后备预案,当CMS发生并发失败问题时使用。

5、Parallel Old收集器(老年代收集器,并行GC)

(1)特性:Parallel Old是Parallel Scavenge老年代版本。

(2)应用场景:注重吞吐量以及CPU资源敏感场合。

6、CMS(老年代垃圾收集器,并行GC):采用标记清除算法

(1)特性:CMS收集器是以获得最短系统停顿时间为目标的垃圾回收器。

(2)应用场景:B/S系统:服务端。B/S系统重视服务器的响应速度,希望系统停顿时间尽可能短,CMS收集器非常符合此类应用需求。

(3)优点:并发收集,低停顿。

(4)缺点:对CPU资源敏感,产生大量空间碎片。

7、G1(全区域垃圾回收器)

应用场景:应用于低停顿场景。

JVM——垃圾收集算法及垃圾回收器的更多相关文章

  1. JVM 垃圾回收算法和垃圾回收器

    JVM 垃圾回收算法和垃圾回收器. 一.垃圾回收的区域 栈:栈中的生命周期是跟随线程,所以一般不需要关注. 堆:堆中的对象是垃圾回收的重点. 方法区:这一块也会发生垃圾回收,不过这块的效率比较低,一般 ...

  2. JVM 垃圾收集算法 标记-清楚、标记-复制、标记-整理

    摘要 Java程序在运行过程中会产生大量的对象,但是内存大小是有限的,如果光用而不释放,那内存迟早被耗尽.如C.C++程序,需要程序员手动释放内存,Java则不需要,是由垃圾回收器去自动回收. 垃圾回 ...

  3. JVM垃圾收集算法(标记-清除、复制、标记-整理)

     [JVM垃圾收集算法] 1)标记-清除算法: 标记阶段:先通过根节点,标记所有从根节点开始的对象,未被标记的为垃圾对象(错了吧?) 清除阶段:清除所有未被标记的对象 2)复制算法: 将原有的内存空间 ...

  4. 深入理解JVM(五)——垃圾回收器

    轻松学习JVM(五)——垃圾回收器 上一篇我们介绍了常见的垃圾回收算法,不同的算法各有各的优缺点,在JVM中并不是单纯的使用某一种算法进行垃圾回收,而是将不同的垃圾回收算法包装在不同的垃圾回收器当中, ...

  5. JVM的垃圾回收机制 总结(垃圾收集、回收算法、垃圾回收器)

     相信和小编一样的程序猿们在日常工作或面试当中经常会遇到JVM的垃圾回收问题,有没有在夜深人静的时候详细捋一捋JVM垃圾回收机制中的知识点呢?没时间捋也没关系,因为小编接下来会给你捋一捋. 一. 技术 ...

  6. java架构之路-(12)JVM垃圾回收算法和垃圾回收器

    接上次JVM虚拟机堆内存模型来继续说,上次我们主要说了什么时候可能把对象直接放在老年代,还有我们的可能性分析,提出GCroot根的概念.这次我们主要来说说垃圾回收所使用的的算法和我们的垃圾回收器,需要 ...

  7. Jvm垃圾收集器和垃圾回收算法

    概述: 目前内存的动态分配和内存的回收技术已经相当成熟,一切看起来都已经进入了“自动化”时代,为什么还要去了解GC和内存分配呢?原因很简单:当需要排查各种内存泄漏.内存溢出问题时,当垃圾收集器成为系统 ...

  8. Java垃圾回收算法和垃圾回收器

    基本上 jvm内存回收有三种 基本算法 标记-清除 标记清除的算法最简单,主要是标记出来需要回收的对象,然后然后把这些对象在内存的信息清除.如何标记需要回收的对象,在上一篇文章里面已经有说明. 标记- ...

  9. [JVM 相关] Java 新型垃圾回收器(Garbage First,G1)

    回顾传统垃圾回收器 HotSpot 垃圾收集器实现 Serial Collector(串型收集器) 使用场景,大多数服务器是单核CPU. 适用收集场景:1. 新生代收集(Young Generatio ...

随机推荐

  1. Qt 窗口阴影效果的实现

    前言 今天正好搞一下窗口的阴影,发现一篇文章写的真是不错.毫不犹豫滴转过来了,感谢作者分享. 转自:http://blog.sina.com.cn/s/blog_a6fb6cc90101eoop.ht ...

  2. 【Java】String、StringBuffer、StringBuilder

    java.lang.String类 概述 String:代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现 String声明为final,不可被 ...

  3. silky微服务业务主机简介

    目录 主机的概念 通用主机 web主机 业务主机类型 使用web主机构建微服务应用 使用通用主机构建微服务应用 构建具有websocket能力的微服务应用 构建网关 开源地址 在线文档 主机的概念 s ...

  4. vuex4 极速入门到上手

    vuex4 是 vue3的兼容版本,提供了和vuex3 的相同API.因此我们可以在 vue3 中复用之前已存在的 vuex 代码. 一.安装以及初始化 vuex4安装: npm install vu ...

  5. Idea tomcat debug按钮灰色无法运行

    打开Project Structure 2.选中src,点击按钮关闭界面,重启idea即可

  6. Part 29 AngularJS intellisense in visual studio

    In the previous videos if you have noticed as we were typing the angular code in Script.js file we w ...

  7. 华为开发者大会主题演讲:3D建模服务让内容高效生产

    内容来源:华为开发者大会2021 HMS Core 6 Graphics技术论坛,主题演讲<3D建模服务使能3D内容高效生产>. 演讲嘉宾:华为消费者云服务 AI算法专家 3D建模服务(3 ...

  8. React-Router学习(基础路由与嵌套路由)

    示例:基本路由 在这个例子中,我们有3个'Page'组件处理<Router>. 注意:而不是<a href="/">我们使用<Link to=&quo ...

  9. 🏆【Alibaba中间件技术系列】「RocketMQ技术专题」小白专区之领略一下RocketMQ基础之最!

    应一些小伙伴们的私信,希望可以介绍一下RocketMQ的基础,那么我们现在就从0开始,进入RocketMQ的基础学习及概念介绍,为学习和使用RocketMQ打好基础! RocketMQ的定位 Rock ...

  10. 算法题-n月后兔子数量

    有一对兔子,从出生后第5个月起每个月都生一对兔子,小兔子长到第5个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? public class test3 { public stati ...