JVM 垃圾回收

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

垃圾回收算法

标记-清除算法Mark and Sweep

标记-清除算法分为两个阶段。在标记阶段垃圾收集器会标记所有活动对象在清除阶段垃圾收集器会清除所有未标记的对象。标记-清除算法存在的问题是会产生内存碎片从而影响后续的内存分配。

复制算法Copying

复制算法将内存分为两个区域每次只使用其中一个区域。当一个区域被占满时垃圾收集器会将所有活动对象复制到另一个区域中然后清除原区域的所有对象。这种算法可以有效地避免内存碎片的问题但是需要消耗更多的内存空间。

标记-整理算法Mark and Compact

标记-整理算法是在标记-清除算法的基础上进行改进的它可以避免内存碎片的问题。在标记阶段垃圾收集器会标记所有活动对象在整理阶段垃圾收集器会将所有活动对象移动到内存的一端然后清除所有未标记的对象。

分代算法Generational

分代算法是一种优化算法它根据对象的生命周期将内存分为不同的代。一般来说新创建的对象往往比较短命垃圾收集器会将这些对象放到年轻代中而长生命周期的对象则会放到老年代中。在垃圾回收时年轻代采用复制算法老年代采用标记-整理算法或标记-清除算法。这种算法可以有效地提高垃圾回收的效率。

分区算法Region-based

分区算法将内存分为多个区域每个区域都有自己的垃圾回收器。这种算法可以充分利用多核 CPU 的性能提高垃圾回收的效率。

引用计数算法

通过为每个对象维护一个引用计数器记录指向该对象的引用数。当引用计数器为 0 时该对象可以被清理。
该算法无法处理循环引用的情况如果对象之间存在相互引用但没有外部引用指向它们中的任何一个时这些对象无法被销毁。

可达性分析

通过分析对象之间的引用关系确定哪些对象可以被程序访问哪些对象已经不再需要并可以被垃圾回收器回收。Java 中使用可达性分析算法来进行垃圾回收以确保内存被充分利用同时避免内存泄漏和空间浪费。
可达性分析的过程通常由垃圾回收器自动完成其基本思路是从一组根对象如线程栈、静态变量等开始递归遍历所有对象并标记所有可达对象。未标记的对象则被认为是不可达对象可以被垃圾回收器回收。

垃圾回收器

Serial 垃圾回收器

单线程的垃圾回收器在多核 CPU 的环境中如果使用 Serial 垃圾回收器那么只能使用一个 CPU 核心来执行垃圾回收操作其他 CPU 核心则处于空闲状态无法充分利用 CPU 的性能
使用标记-清除算法进行垃圾回收。
Serial 垃圾回收器适用于内存较小的环境或者只有单个 CPU 核心的环境。

Parallel 垃圾回收器

多线程的垃圾回收器
标记-清除算法进行垃圾回收
适用于多核 CPU 的环境可以充分利用多核 CPU 的性能。

CMS 垃圾回收器

并发的垃圾回收器它可以在应用程序运行的同时进行垃圾回收。
适用于对响应时间要求较高的应用程序
可能会产生内存碎片。由于采用了标记-清除算法CMS 垃圾回收器无法像复制算法或标记-整理算法那样将内存整理成连续的空间。因此清除之后内存中会留下很多不连续的小块空间这些空间称为内存碎片。

G1 垃圾回收器JDK8

基于分代的垃圾回收器
可以在多核 CPU 的环境下并发执行垃圾回收。
适用于大内存的应用程序
避免内存碎片的问题。

分区G1 垃圾回收器将整个堆内存分成多个大小相等的区域Region每个区域都可以独立地进行垃圾回收操作。这样在进行垃圾回收时可以同时并发执行多个区域的垃圾回收操作从而充分利用多核 CPU 的性能。

并发标记和整理G1 垃圾回收器采用了一种称为“并发标记和整理Concurrent Marking and Compacting”的算法可以在应用程序运行的同时对垃圾进行标记和整理。该算法允许垃圾回收器在多个 CPU 核心上并发执行标记和整理操作从而提高垃圾回收的效率。

ZGCZ Garbage Collector垃圾回收器 (JDK 15)

低延迟ZGC 垃圾回收器可以实现几乎无停顿的垃圾回收最长的垃圾回收时间不超过几毫秒。这对于对实时性要求较高的应用程序非常重要。

高吞吐量尽管 ZGC 垃圾回收器的主要目标是低延迟但它也具有较高的吞吐量可以处理大量的垃圾数据。

可扩展性ZGC 垃圾回收器可以处理非常大的堆内存支持多个 CPU 核心并行执行垃圾回收操作。

分代收集ZGC 垃圾回收器采用分代收集策略可以根据对象的生命周期将堆内存分为不同的代对于不同代采用不同的垃圾回收策略。

内存压缩ZGC 垃圾回收器可以在垃圾回收过程中对内存进行压缩从而减少内存的碎片化。

内存碎片

内存碎片会影响后续的内存分配。当应用程序需要分配一块大的连续内存时由于内存中存在很多小的不连续空间无法满足分配要求导致内存分配失败。

CMS 垃圾回收器采用 空闲列表Free List 机制来维护内存碎片。
空闲列表是一种链表结构用于记录内存中空闲的小块空间。当应用程序需要分配内存时CMS 垃圾回收器会遍历空闲列表找到一块足够大的空间来分配给应用程序。虽然空闲列表可以缓解内存碎片的问题但是它也会带来额外的开销和复杂性

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6