当前位置: 首页 > 网络应用技术

垃圾回收的主流垃圾回收算法是什么?

时间:2023-03-07 17:06:10 网络应用技术

  在Java的开发过程中,所有事物都是物体,生产的物体具有生命周期,即物体生存的时间。在程序的过程中,将生成完成其任务的对象。目前,对象成为一个程序。如果未回收垃圾,将始终占据内存,并且内存对程序的性能有一定的影响。在C ++中,开发人员通过自己的垃圾回收,但在Javadevelvenders中,不需要照顾潜在的垃圾回收算法。通常,开发人员不需要照顾,但是在某些特定情况下,开发人员需要掌握JVM垃圾回收机制以更好地解决某些程序问题。

  爪哇堆中的对象;有一个分开的内存划分。当内存满足时,将发生垃圾回收;

  Java方法区域中的某些变量,常数池中的一些变量;因为垃圾回收的成本性能太低,所以没有垃圾回收;

  注意:在不同的垃圾回收商中,堆叠内存的分裂是不同的。

  根据对象的引用,不同对象引用的时机是不同的。

  强制引用

  软引用

  弱引号:描述那些不必要的对象;当下一个垃圾回收时,对象被回收,无论记忆是否足够

  虚拟使用:最弱的参考关系;当它仅用于垃圾回收物回收对象时,将系统通知发送到对象;

  强大:有用和必要

  软:有用

  弱:不款项

  虚拟:没用

  1.使用参考计数方法来判断

  2.使用性能分析算法判断

  以下两种算法如下:

  在垃圾回收机制中,传统的存在很简单,但是在考虑参考时,您需要考虑其他情况。JVM不使用参考计数算法;执行finalize()方法后,它将由垃圾回收器回收;

  SO称为参考计数方法:对目标的引用数,即对对象的指针数;当对象的参考计数为0时,有必要回收;

  SO称为GC根算法,判断对象与GC根对象之间没有参考链。

  1.虚拟机堆栈中引用的对象;开发人员编写的方法中的对象指向对象;例如::

  2.方法区域中引用的对象;类别定义的静态类变量引用的对象;例如:

  3.本地方法堆栈中引用的对象,本机方法中变量的对象

  4. Java虚拟机中的引用,例如与基本数据类型相对应的类对象;居住在JVM中的异常物体,例如空指针异常;

  5.同步锁同步的对象;

  创建的垃圾回收算法具有指导意识形态。互联网上的大多数博客直接谈论各种算法,这些算法不合适;

  1.分数弱:大多数物体的生存时间很短

  2.基于得分强的假设:对于在垃圾回收过程中幸存下来的物体,很难消失;

  3.跨代引用假设:新一代指向旧一代,这种情况相对较小

  根据上面垃圾回收算法的指导,相关的科学研究人员和开发人员在下面创建了更经典的垃圾回收算法。垃圾收集算法正在随着时代的发展。

  有限的条件是爪哇堆中的垃圾回收;

  在爪哇堆中,只有新一代和老年。没有永久一代。只有永久一代存在于方法区域。

  爪哇桩=新一代 +老年

  方法区域垃圾回收:有些人被称为元空间或永久一代,因为该方法区域中垃圾回收的影响太差,或者回收的成本性能太低;

  垃圾收集算法是记忆回收的方法。垃圾收集器是记忆回收的从业者;换句话说:垃圾回收与垃圾回收算法之间的逻辑是,垃圾恢复设备实现了垃圾恢复算法;

  JVM提供了许多垃圾回收商。根据需求,最好适应当地条件。

  不同的垃圾回收商实施了不同的垃圾回收算法,但是经典的垃圾回收算法仍然是:Mark -Removal;标记 - 副本,标签

  新一代收藏家

  单个线程作品的收藏家;当垃圾回收时,您将开始世界,也就是说,在运行垃圾回收线程时,所有用户线程都需要停止;它对用户的体验有一定的影响。考虑一下计算机的计算机。每小时每五分钟卡住一次,这仅仅是用于垃圾恢复。

  在客户端模式下,Hotspot的默认垃圾恢复是简单有效的。目前,停止世界可以在100毫秒内控制世界。

  新一代收藏家

  从本质上讲,串行的多线程并发版本已退出了热点的历史阶段。

  在单核机器上,它不如串行垃圾收集器好;

  新一代收藏家

  基于收藏家的副本算法的收集器;并行收集的多线收集器;

  平行清除本身:实现可以控制的受控吞吐量;

  体积:运行用户代码的时间 /时间 +运行用户代码的时间 +运行垃圾收集时间

  系列是连续收藏家的旧版本。

  它也是一个单一的收藏家;基于标记组织算法;

  主要意义:在客户端模式下提供热点虚拟机

  并行旧版本是平行清除收集器的旧版本,支持基于标记的排序算法的实现;

  最短回收暂停时间作为设计目标的垃圾回收设备。当前基于软件的软件更关心系统的响应时间,即,系统的停顿时间尽可能短,从而改善了尽可能多的改进,从而改善了系统的改进,从而改善了系统的改进。改善系统的改进,从而改善良好的互动体验;CMS收集器更符合此应用程序方案;

  优点:低站,可以同时执行

  CMS(图标)的实施原则:

  缺点:

  1.当系统的CPU数量相对较小时,整个系统资源的开销相对较大;CMS默认值启动的垃圾恢复的核心线程数:(处理器 + 3的核心数量)/ 4;

  2. CMS无法处理浮动垃圾;当CMS带有并发标记和并发清洁时,由于程序正在继续运行,它是任意生成的。在废物回收中,它不会清理,并且这些漂浮的垃圾只能在下一个垃圾回收中清洁;

  3.垃圾收集器本身基于标记的算法,因此记忆空间的碎片存在问题。在一定程度上,有必要组织记忆片段。

  应用于服务器的垃圾恢复;CMS的替代和继承人;

  在JDK9期间,CMS已陷入不建议进行的垃圾回收中;

  G1垃圾回收商的实施:

  在以前的垃圾回收器中,注意点是回收一代中的垃圾回收利用,但是在G1垃圾收集器中,回收垃圾收集的量度不是要清理一定一代,而是分析垃圾的量。在快速内存中,分析了回收的好处相对较大,这是后者混合GC模式的形成。

  以下是内存布局的图:

  用户可以指定预期的停顿;在100到300毫秒之间更合理;

  延期序列G1垃圾回收的连续优化将使G1在各个方面都比CMS尽可能更好。

  Java8应使用平行的清除 +并行旧默认值

  检查上面的摘要

  初始标记并发标记重新标记并发清洁

  CMS是一种垃圾回收。并发标记扫描基于标记 - 分布算法并发暂停收集器;

  垃圾回收线可以与用户线程同时执行,以减少系统的停顿并增强用户的体验;它对B/S架构的开发很有帮助;

  1.创建新对象时,内存分配将首先在新兴区进行。当经历了多次垃圾回收时,该物体仍然可以生存。通常,该物体将被放置在老年时。在记忆空间已满后,将发生主要的GC;

  2.当完整的GC发生时,老年人将回收

  完整的GC:收集整个Java堆和方法区域的对象;

  JVM不使用参考计数方法,使用罐分析算法;判断对象的引用是否可以达到GC根。如果可以到达,那不是垃圾的对象。

  已经分析了可用分析算法的使用。当没有引用GC根上的当前对象和额头对象时,不会立即通过垃圾立即将其回收。

  只有一次标记的情况:对象不会重写finalize()方法,或者已执行此方法,则可以回收此对象;

  两个符号:对象重写了最终化方法,并且尚未由虚拟机执行。对象已建立,因此该对象无需回收,否则需要回收;

  周林深刻了解第三版Java虚拟机

  一篇文章了解JVM虚拟机(内存,垃圾回收,性能优化)

  G1,ZGC,Shenandoahgc高绩效收集器 - 深度分析

  原始:https://juejin.cn/post/7094908670235901966