JVM学习(三)JVM垃圾回收

2023-04-03  本文已影响0人  我要离开浪浪山

一、引用的分类

在了解JVM垃圾回收机制之前,了解一下对象的引用类型是非常必要的。

二、什么是JVM垃圾回收

定义:由于Java语言没有提供释放已分配内存的显示操作方法,垃圾回收(GC)是可以自动监测对象是否超过作用域从而达到自动回收内存的一种方式。

好处:Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。

显式调用:System.gc() 或Runtime.getRuntime().gc() ,但JVM可以屏蔽掉显式的垃圾回收调用。

  • PS:显式调用并不一定会立即执行,也不推荐显式调用,因为JVM有自己的垃圾回收策略。
  • PS:程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。(垃圾回收的不可预知性)

三、JVM垃圾回收机制

bb8b565a67d21e862c5b80d9dabce09.png

JVM的垃圾回收机制是基于Java语言的自动内存管理机制。其核心思想是让程序员摆脱手工内存管理的麻烦,专注于业务逻辑的处理,而将内存管理的复杂工作交由JVM进行实现。

在JVM中,垃圾回收器负责回收无用的对象。垃圾回收器一般分为两类:新生代垃圾回收器老年代垃圾回收器

  • 新生代垃圾回收器:新生代垃圾回收器针对年轻代的对象进行垃圾回收,并采用分代收集算法,通常采用的垃圾回收器有 serial、parNew、Parallel Scavenge 等,其中 Serial 和 Parallel Scavenge 适用于单核处理器机器,而 ParNew 则是 Serial 的多线程版本,适用于多核处理器机器。
  • 老年代垃圾回收器:老年代垃圾回收器针对年老代的对象进行垃圾回收,并采用标记清除、标记-整理等算法进行垃圾回收,常见的垃圾回收器有 serial old、Parallel Old、CMS、G1 等,其中 serial old 应用场景适合于处理器性能较弱的机器,而 Parallel Old 和 CMS 则适用于处理器性能更加强劲的机器。总的来说,JVM的垃圾回收机制是非常复杂的,具体的垃圾回收器的选择以及调优需要根据应用场景和实际需求来选择合适的垃圾回收器。

与垃圾回收相关的JVM参数:

-Xms / -Xmx — 堆的初始大小 / 堆的最大大小
-Xmn — 堆中年轻代的大小
-XX:-DisableExplicitGC — 让System.gc()不产生任何作用【生产环境一般开启】
-XX:+PrintGCDetails— 打印GC的细节
-XX:+PrintGCDateStamps — 打印GC操作的时间戳
-XX:NewSize / XX:MaxNewSize — 设置新生代大小/新生代最大大小
-XX:NewRatio — 可以设置老生代和新生代的比例
-XX:PrintTenuringDistribution — 设置每次新生代GC后输出幸存者乐园中对象年龄的分布
-XX:InitialTenuringThreshold / -XX:MaxTenuringThreshold — 设置老年代阀值的初始值和最大值
-XX:TargetSurvivorRatio — 设置幸存区的目标使用率 `

四、GC Roots

1、判断一个对象是否应该被回收

判断对象是否存活一般有两种方式:

1743015-20210823105152841-1515209639.png

2、可以作为GC Root对象

判断对象的存活.png

在Java语言中,GC Roots是指程序中被直接引用的对象集合。被直接引用的对象包括以下几种:

五、回收方法区

方法区回收价值很低,主要回收废弃的常量和无用的类。

如何判断无用的类:

六、垃圾回收算法

GC最基础的算法有三种: 复制算法、标记 -清除算法、标记-整理算法,我们常用的垃圾回收器一般都采用分代收集算法

Appel式的复制回收算法.png

缺点:复制算法可以避免内存碎片的问题,但需要复制存活对象,可能在空间使用率和复制代价方面不如标记-整理算法。

标记 -清除算法.png

缺点:标记-清除算法的缺点在于可能会出现内存碎片问题。因为垃圾收集器解决了垃圾对象占据内存的问题,而没有提供一种机制去优化内部内存的分配。简单来说,由于清理不连续的内存块,可能会导致分配较大对象时出现内存不足的情况。

缺点:标记-整理算法避免了内存碎片的问题,但需要移动存活对象,可能在时间效率方面不如标记-清除算法。

1、分代收集算法属于什么算法

分代收集算法属于标记-整理算法和复制算法的混合使用。它将堆分为几代,通常分为年轻代和老年代两代,通过将不同代的对象分别存储,来针对对象的生命周期设计不同的GC策略。其中,年轻代使用复制算法,因为年轻代的对象生命周期短,相互引用关系较少,适合采用快速复制的方式进行GC老年代采用标记-整理算法,因为老年代的对象生命周期长,对象间相互引用关系复杂,进行标记后整理可以避免内存碎片的产生。分代收集算法通过针对不同代的对象选择不同的GC策略,可以有效地提高GC的效率和减少GC次数,减少系统的停顿时间。

七、垃圾回收器

1、垃圾回收器介绍:

垃圾回收器.png

2、垃圾回收过程

简单的垃圾回收器工作示意图.png

3、CMS垃圾回收器

并发垃圾回收器-CMS.png 8893b25b1494dfb2943054f1b89425c.png

4、CMS垃圾回收器- java中的预处理

是指在重新标记之前执行,减少暂停所有用户线程的时间;

5、CMS垃圾回收器 - 并发可中断处理

打断:3种,其中可以中断

6、android中jdk1.7采用什么垃圾回收器,简单介绍一下

Android 中的 JDK 1.7 在 Dalvik 虚拟机上运行,采用了两种不同的垃圾回收器,分别是:

需要注意的是,Android 中的 JDK 1.7 采用的是混合垃圾回收器,即 SerialCMS 的结合体。具体来说,当垃圾回收器在进行垃圾回收时,如果内存使用率比较低,则使用并发垃圾回收器;如果内存使用率比较高,则使用串行垃圾回收器。这样就能够在不同的场景下选择最合适的垃圾回收器,从而达到最优的效果。

7、Concurrent GC 是CMS收集器吗

是的,Concurrent GC 通常指的是 CMS(Concurrent Mark Sweep)垃圾回收器,在JDK 8之前,这是Java默认的并发垃圾回收器。

8、android中jdk1.8采用什么垃圾回收器,简单介绍一下

在 Android 中,JDK 1.8 默认采用的是 G1 垃圾回收器(Garbage First)。G1 是一种面向服务端应用场景的垃圾回收器,在 JDK 9 之后成为了 Java 虚拟机的默认垃圾回收器

G1 是一种分代垃圾回收器,它将 Java 堆分成许多个小块(Region),并非分成三代,这样可以更灵活地管理内存。在 G1 回收过程中,将 heap 拆成了不同的 region,每个 Region 拥有单独的记忆(用快速操作表格处理)。在垃圾回收期间,G1 垃圾回收器优先回收垃圾占用较多的区域(其名称"G1"就源于此),优化了垃圾回收的效率,减少了应用的停顿时间,因此适用于大内存的、多处理器的服务器应用场景。

与 CMS 垃圾回收器相比,G1 垃圾回收器有更高的系统吞吐量和更短的 GC 暂停时间,因此得到了越来越多的关注和使用。在使用 G1 垃圾回收器时,我们需要根据实际情况调整垃圾回收器参数以达到最佳的性能表现。

9、android中jdk11采用什么垃圾回收器,简单介绍一下

在 Android 中,JDK 11 默认采用的是 ZGC(Z Garbage Collector)垃圾回收器

ZGC 是一种非常先进的垃圾回收器,其设计目的是为了能够在几乎任何规模的堆内存下都能够提供低延迟,即便是以非常大的堆内存和长时间的垃圾回收为代价。

与其他常见的垃圾回收器相比,ZGC 的最大特点是其非常低的暂停时间。ZGC 可以在几个毫秒内完成垃圾回收,最大暂停时间不会超过 10ms,这大大减少了应用停顿时间,因此适用于需要高可用性和低延迟的应用场景。此外,ZGC 回收器效率非常高,因此对 CPU、内存资源占用较少,有利于提升系统吞吐量。

ZGC 给大型、多处理器(多处理器)系统提供了良好的性能支持。ZGC 在垃圾回收时采用类似记录日志的方式进行,通过将所有修改记录在缓冲区中,然后将缓冲区中的内容复制回堆上来,来避免垃圾回收期间大规模的复制和重定位。这种机制降低了复制和重定位对应用的影响,增加了并发性和可扩展性。然而,ZGC 也有一些局限性,例如需要较大的内存空间支持,只支持 64 位平台等。对于使用 JDK 11 并且在大型、多处理器系统下需要低延迟的应用场景,建议使用 ZGC,同时需要根据实际情况调整垃圾回收器参数以达到最佳的性能表现。

10、ParNew和Parallel scavenge的区别

ParNew和Parallel Scavenge都是JVM的垃圾收集器,两者都属于新生代垃圾收集器,对于年轻代的垃圾回收具有更好的性能表现。然而,两者在垃圾回收的算法和实现上有所不同。

总之,ParNew注重减少严格意义上的GC暂停时间,Parallel Scavenge注重吞吐量的最大化。从整体来看,ParNew在大部分情况下表现更为稳定,而Parallel Scavenge在需要高吞吐量时表现更好。在实际应用中,应根据具体需要选择合适的垃圾回收器。

jvm整理.png

地址:https://www.cnblogs.com/riches/p/11912479.html

上一篇 下一篇

猜你喜欢

热点阅读