JVM的垃圾算法有哪几种

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM的垃圾算法有哪几种相关的知识,希望对你有一定的参考价值。

一、垃圾收集器概述

如上图所示,垃圾回收算法一共有7个,3个属于年轻代、三个属于年老代,G1属于横跨年轻代和年老代的算法。

JVM会从年轻代和年老代各选出一个算法进行组合,连线表示哪些算法可以组合使用

二、各个垃圾收集器说明

1、Serial(年轻代)

    年轻代收集器,可以和Serial Old、CMS组合使用

    采用复制算法

    使用单线程进行垃圾回收,回收时会导致Stop The World,用户进程停止

    client模式年轻代默认算法

    GC日志关键字:DefNew(Default New Generation)

    图示(Serial+Serial Old)

    2、ParNew(年轻代)

    新生代收集器,可以和Serial Old、CMS组合使用

    采用复制算法

    使用多线程进行垃圾回收,回收时会导致Stop The World,其它策略和Serial一样

    server模式年轻代默认算法

    使用-XX:ParallelGCthreads参数来限制垃圾回收的线程数

    GC日志关键字:ParNew(Parallel New Generation)

    图示(ParNew + Serail Old)

    3、Paralle Scavenge(年轻代)

    新生代收集器,可以和Serial Old、Parallel组合使用,不能和CMS组合使用

    采用复制算法

    使用多线程进行垃圾回收,回收时会导致Stop The World

    关注系统吞吐量

    -XX:MaxGCPauseMillis:设置大于0的毫秒数,收集器尽可能在该时间内完成垃圾回收

    -XX:GCTimeRatio:大于0小于100的整数,即垃圾回收时间占总时间的比率,设置越小则希望垃圾回收所占时间越小,CPU能花更多的时间进行系统操作,提高吞吐量

    -XX:UseAdaptiveSizePolicy:参数开关,启动后系统动态自适应调节各参数,如-Xmn、-XX:SurvivorRatio等参数,这是和ParNew收集器重要的区别

    GC日志关键字:PSYoungGen

    4、Serial Old(年老代)

    年老代收集器,可以和所有的年轻代收集器组合使用(Serial收集器的年老代版本)

    采用 ”标记-整理“算法,会对垃圾回收导致的内存碎片进行整理

    使用单线程进行垃圾回收,回收时会导致Stop The World,用户进程停止

    GC日志关键字:Tenured

    图示(Serial+Serial Old)

    5、Parallel Old(年老代)

    年老代收集器,只能和Parallel Scavenge组合使用(Parallel Scavenge收集器的年老代版本)

    采用 ”标记-整理“算法,会对垃圾回收导致的内存碎片进行整理

    关注吞吐量的系统可以将Parallel Scavenge+Parallel Old组合使用

    GC日志关键字:ParOldGen

    图示(Parallel Scavenge+Parallel Old)

    6、CMS(Concurrent Mark Sweep年老代)

    年老代收集器,可以和Serial、ParNew组合使用

    采用 ”标记-清除“算法,可以通过设置参数在垃圾回收时进行内存碎片的整理
    1、UserCMSCompactAtFullCollection:默认开启,FullGC时进行内存碎片整理,整理时用户进程需停止,即发生Stop The World
    2、CMSFullGCsBeforeCompaction:设置执行多少次不压缩的Full GC后,执行一个带压缩的(默认为0,表示每次进入Full GC时都进行碎片整理)

    CMS是并发算法,表示垃圾回收和用户进行同时进行,但是不是所有阶段都同时进行,在初始标记、重新标记阶段还是需要Stop the World。CMS垃圾回收分这四个阶段
    1、初始标记(CMS Initial mark)    Stop the World   仅仅标记一下GC Roots能直接关联到的对象,速度快
    2、并发标记(CMS concurrent mark) 进行GC Roots Tracing,时间长,不发生用户进程停顿
    3、重新标记(CMS remark)          Stop the World   修正并发标记期间因用户程序继续运行导致标记变动的那一部分对象的标记记录,停顿时间较长,但远比并发标记时间短
    4、并发清除(CMS concurrent sweep) 清除的同时用户进程会导致新的垃圾,时间长,不发生用户进程停顿

    适合于对响应时间要求高的系统

    GC日志关键字:CMS-initial-mark、CMS-concurrent-mark-start、CMS-concurrent-mark、CMS-concurrent-preclean-start、CMS-concurrent-preclean、CMS-concurrent-sweep、CMS-concurrent-reset等等

    缺点
    1、对CPU资源非常敏感
    2、CMS收集器无法处理浮动垃圾,即清除时用户进程同时产生的垃圾,只能等到下次GC时回收
    3、因为是使用“标记-清除”算法,所以会产生大量碎片

    图示

    7、G1

    G1收集器由于没有使用过,所以从网上找了一些教程供大家了解

    并行与并发

    分代收集

    空间整合

    可预测的停顿

参考技术A 1.标记清除
标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。
在标记阶段首先通过根节点(GC Roots),标记所有从根节点开始的对象,未被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有未被标记的对象。
2.复制算法
从根集合节点进行扫描,标记出所有的存活对象,并将这些存活的对象复制到一块儿新的内存(图中下边的那一块儿内存)上去,之后将原来的那一块儿内存(图中上边的那一块儿内存)全部回收掉
3.标记整理
复制算法的高效性是建立在存活对象少、垃圾对象多的前提下的。
这种情况在新生代经常发生,但是在老年代更常见的情况是大部分对象都是存活对象。如果依然使用复制算法,由于存活的对象较多,复制的成本也将很高。
4.分代收集算法
分代收集算法就是目前虚拟机使用的回收算法,它解决了标记整理不适用于老年代的问题,将内存分为各个年代。一般情况下将堆区划分为老年代(Tenured Generation)和新生代(Young Generation),在堆区之外还有一个代就是永久代(Permanet Generation)。
在不同年代使用不同的算法,从而使用最合适的算法,新生代存活率低,可以使用复制算法。而老年代对象存活率搞,没有额外空间对它进行分配担保,所以只能使用标记清除或者标记整理算法
参考技术B

    1、引用计数收集器

    2、跟踪收集器

    3、压缩收集器

    4、拷贝收集器

    5、按代收集的收集器

    6、自适应收集器

    7、火车算法

限篇幅有限,完整的各种算法的介绍、优缺点以及图文解析请参见。

常见jvm垃圾回收算法解读

加密算法是什么?有哪几种类型?有什么用?

随着信息化和数字化社会的发展,人们对信息安全和保密的重要性认识不断提高,许多客户需要在存储数据时需要进行加密算法的转化。今天就来聊聊加密算法是什么?有哪几种类型?有什么用?

加密算法是什么?

数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码为“密文”,使其只能在输入相应的密钥之后才能显示出原容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程。

加密算法有哪几种类型?

加密算法主要分为三种类型:

1、对称性加密算法

对称式加密就是加密和解密使用同一个密钥。信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行加解密了。对称加密算法用来对敏感数据等信息进行加密。

2、非对称算法

非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为"公钥"和"私钥",它们两个必需配对使用,否则不能打开加密文件。

3、散列算法

Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一地确定输入值。

加密算法有什么用?

1、数据的保密性,防止用户的数据被窃取或泄露;

2、保证数据的完整性,防止用户传输的数据被篡改;

3、通信双方的身份确认,确保数据来源与合法的用户。

以上是关于JVM的垃圾算法有哪几种的主要内容,如果未能解决你的问题,请参考以下文章

Java详解:mysql的锁类型有哪几种

Java基础资料整理

垃圾回收机制:知识框架

JVM垃圾回收几种常见算法和常见收集器

JVM的内存结构,Eden和Survivor比例;JVM中一次完整的GC流程,对象如何晋升到老年代,说说你知道的几种主要的JVM参数;CMS 常见参数解析;.你知道哪几种垃圾收集器,各自的优缺点(代码

JVM07:常见的几种垃圾回收器和引用类型