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

相关文章

Java中自旋锁与CAS机制的深层关系与区别

《Java中自旋锁与CAS机制的深层关系与区别》CAS算法即比较并替换,是一种实现并发编程时常用到的算法,Java并发包中的很多类都使用了CAS算法,:本文主要介绍Java中自旋锁与CAS机制深层... 目录1. 引言2. 比较并交换 (Compare-and-Swap, CAS) 核心原理2.1 CAS

C# GC回收的方法实现

《C#GC回收的方法实现》本文主要介绍了C#GC回收的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 一、什么是 GC? 二、GC 管理的是哪部分内存? 三、GC 什么时候触发?️ 四、GC 如何判断一个对象是“垃圾

Python内存管理机制之垃圾回收与引用计数操作全过程

《Python内存管理机制之垃圾回收与引用计数操作全过程》SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式,本文将介绍如何使用SQLAlc... 目录安装核心概念连接数据库定义数据模型创建数据库表基本CRUD操作创建数据读取数据更新数据删除数据查

Java 中的 equals 和 hashCode 方法关系与正确重写实践案例

《Java中的equals和hashCode方法关系与正确重写实践案例》在Java中,equals和hashCode方法是Object类的核心方法,广泛用于对象比较和哈希集合(如HashMa... 目录一、背景与需求分析1.1 equals 和 hashCode 的背景1.2 需求分析1.3 技术挑战1.4

Linux中查看操作系统及其版本信息的多种方法

《Linux中查看操作系统及其版本信息的多种方法》在服务器运维或者部署系统中,经常需要确认服务器的系统版本、cpu信息等,在Linux系统中,有多种方法可以查看操作系统及其版本信息,以下是一些常用的方... 目录1. lsb_pythonrelease 命令2. /etc/os-release 文件3. h

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

MySQL的触发器全解析(创建、查看触发器)

《MySQL的触发器全解析(创建、查看触发器)》MySQL触发器是与表关联的存储程序,当INSERT/UPDATE/DELETE事件发生时自动执行,用于维护数据一致性、日志记录和校验,优点包括自动执行... 目录触发器的概念:创建触www.chinasem.cn发器:查看触发器:查看当前数据库的所有触发器的定