64.7款经典的垃圾收集器以及它们之间的组合关系、如何查看默认的垃圾回收器

2024-05-29 16:38

本文主要是介绍64.7款经典的垃圾收集器以及它们之间的组合关系、如何查看默认的垃圾回收器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1.七款经典的垃圾收集器
  • 2.垃圾收集器之间组合关系
  • 3.查看默认的垃圾收集器

1.七款经典的垃圾收集器

经典的垃圾回收器又如下7种:
在这里插入图片描述
如下图所示,是经典的垃圾回收器和垃圾分代之间的关系。
Serial GCParallel Scavenger GC以及ParNew GC只能收集年轻代。
Serial Old GCParallel Old GC以及CMS GC只能收集老年代。
G1 GC既能收集年轻代又能收集老年代。
在这里插入图片描述

2.垃圾收集器之间组合关系

一款年轻代的垃圾收集器总是对应着一款老年代的垃圾收集器。
下面的图更新到了JDK14

  1. 先将虚线看成是实线,一款年轻代的垃圾收集器对应着两款老年代的垃圾收集器。比如说新生代使用Serial GC,老年代可以使用CMS GC或者Serial Old GC
  2. 在老年代,图中的CMS GC还对应着Serial Old GCSerial Old GCCMS GC的后备方案,因为CMS GC是并发的垃圾收集器,在进行垃圾回收的时候,用户线程还在工作,用户线程可能还在制造垃圾,如果CMS GC垃圾回收的速度比用户线程制造垃圾的速度慢,就会回收失败;如果CMS GC失败会使用Serial Old GC作为后备方案,进行一次Full GC
  3. 红色的虚线,表示的是在JDK8中这种组合被废弃,但是还可以使用;在JDK9中就被移除了,完全不能使用这两种组合了。绿色虚线表示的是,JDK14中,这种组合被废弃了。
  4. CMS GC在JDK14中被移除了。
    在这里插入图片描述
    在这里插入图片描述
    JDK8中默认的组合是Parallel Scavenger GCParallel Old GCJDK9以后默认的垃圾回收器是G1 GC
    没有哪一种垃圾回收器可以绝对的说是最好的,不同的场景选择不同的垃圾回收器会更好。

3.查看默认的垃圾收集器

在这里插入图片描述
两种方式:

  1. 执行程序的时候,在eclipseJVM参数中加入-XX:+PrintCommandLineFlags
  2. 通过命令行的方式: jinfo -flag 相关垃圾回收器 java程序进程ID在这里插入图片描述
    输出的结果为-XX:+UseParallelGC,+号表示的是使用了ParallelGC。如果是减号,就表示的是没有使用。

更多JVM文章请访问我的JVM专栏:
https://blog.csdn.net/u011069294/category_10113093.html

这篇关于64.7款经典的垃圾收集器以及它们之间的组合关系、如何查看默认的垃圾回收器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1014069

相关文章

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

c++ 类成员变量默认初始值的实现

《c++类成员变量默认初始值的实现》本文主要介绍了c++类成员变量默认初始值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录C++类成员变量初始化c++类的变量的初始化在C++中,如果使用类成员变量时未给定其初始值,那么它将被

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

PostgreSQL 默认隔离级别的设置

《PostgreSQL默认隔离级别的设置》PostgreSQL的默认事务隔离级别是读已提交,这是其事务处理系统的基础行为模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一 默认隔离级别概述1.1 默认设置1.2 各版本一致性二 读已提交的特性2.1 行为特征2.2

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c