Java中各个版本JDK分别有哪些常见的垃圾回收算法?它们的适用场景和开启方法是什么?

news2024/11/28 12:45:29

Java中各个版本JDK分别有哪些常见的垃圾回收算法?它们的使用场景和开启方法是什么?

    • 1.1 JDK 1.8 中的垃圾回收算法
    • 1.2 JDK 11 中的垃圾回收算法
    • 1.3 JDK17中的垃圾回收算法

1.1 JDK 1.8 中的垃圾回收算法

Java 8引入了一些不同类型的垃圾回收算法,每种算法都有不同的适用场景和开启方法。

以下是Java 8中常见的垃圾回收算法:

在Java JDK 1.8中,有几种常见的垃圾回收算法可供选择,每种算法都适用于不同的使用场景。以下是一些常见的垃圾回收算法以及它们的使用场景和开启方法:

  1. Serial Garbage Collector (串行垃圾回收器):

    • 使用场景:适用于单线程应用或小型客户端应用。
    • 开启方法:默认情况下,可以使用 -XX:+UseSerialGC 显式启用。
  2. Parallel Garbage Collector (并行垃圾回收器):

    • 使用场景:适用于多核处理器和需要高吞吐量的应用。
    • 开启方法:JDK 1.8 中的默认垃圾回收器,也可以使用 -XX:+UseParallelGC 显式启用。
  3. CMS (Concurrent Mark-Sweep) Garbage Collector (并发标记清除垃圾回收器):

    • 使用场景:适用于需要低停顿时间的应用,如Web应用。
    • 开启方法:使用 -XX:+UseConcMarkSweepGC 启用。
  4. G1 (Garbage-First) Garbage Collector (G1垃圾回收器):

    • 使用场景:适用于大型内存和需要低停顿时间的应用。
    • 开启方法:使用 -XX:+UseG1GC 启用。
  5. Serial Old Garbage Collector (串行老年代垃圾回收器):

    • 使用场景:适用于老年代的单线程应用。
    • 开启方法:可以使用 -XX:+UseSerialOldGC 显式启用。

Java JDK 1.8 默认使用的Parallel Garbage Collector (并行垃圾回收器),垃圾回收器选择切换建议:

  • 要选择合适的垃圾回收算法,需要考虑应用程序的性能要求、内存需求和硬件配置
  • 我们可以通过在Java启动命令中添加相应的标志来选择垃圾回收器。
  • 注意,不同版本的Java可能支持不同的垃圾回收器,因此应该查阅特定版本的文档以获取详细信息。
  • 此外,可以使用JVM调优工具来帮助您确定最适合我们的应用程序的垃圾回收器。

查看当前JDK默认使用的是哪个垃圾回收算法?

秘法命令:

java -XX:+PrintCommandLineFlags -version

执行结果:
在这里插入图片描述

看到上图执行结果中是 -XX:+UseParallelGC ,可知 Java JDK 1.8 默认使用的Parallel Garbage Collector (并行垃圾回收器)。

1.2 JDK 11 中的垃圾回收算法

在JDK 11中,常见的垃圾回收算法包括以下几种,每种算法都适用于不同的使用场景:

  1. G1 (Garbage-First) Garbage Collector (G1垃圾回收器):

    • 适用场景:适用于大型内存和需要低停顿时间的应用,特别适用于多核处理器。
    • 开启方法:默认情况下,G1垃圾回收器是JDK 11中的默认垃圾回收器,不需要额外的参数。如果需要显式启用,可以使用 -XX:+UseG1GC
  2. Z Garbage Collector (Z垃圾回收器):

    • 适用场景:适用于需要极低停顿时间的应用,如云端和微服务应用。
    • 开启方法:使用 -XX:+UseZGC 启用。
  3. Parallel Garbage Collector (并行垃圾回收器):

    • 适用场景:适用于需要高吞吐量的应用,特别是服务器端应用。
    • 开启方法:可以使用 -XX:+UseParallelGC 显式启用。
  4. Serial Garbage Collector (串行垃圾回收器):

    • 适用场景:适用于单线程应用或小型客户端应用。
    • 开启方法:可以使用 -XX:+UseSerialGC 显式启用。
  5. Shenandoah Garbage Collector (Shenandoah垃圾回收器):

    • 适用场景:适用于需要低停顿时间和大内存的应用。
    • 开启方法:使用 -XX:+UseShenandoahGC 启用。
  6. Epsilon Garbage Collector (Epsilon垃圾回收器):

    • 适用场景:适用于性能测试和特殊用途,完全禁用垃圾回收。
    • 开启方法:使用 -XX:+UseEpsilonGC 启用。

选择建议:

  • 在JDK 11中,选择适当的垃圾回收算法取决于应用的性质、硬件配置和性能需求。
  • 你可以通过命令行参数来显式指定所需的垃圾回收器,或者允许Java自动选择默认的垃圾回收器。
  • 要根据应用的需求和性能进行调优,通常需要进行性能测试和分析以确定最合适的垃圾回收器。

1.3 JDK17中的垃圾回收算法

对于JDK 17,垃圾回收算法主要包括以下几种:

  • ZGC(Z Garbage Collector):ZGC 是一个可扩展、低延迟的垃圾收集器。
    • 它可以在任何堆内存大小下提供可预测的、低延迟的性能。
    • ZGC通过使用读屏障(Read Barriers)和染色指针(Colored Pointers)等技术来达到这个目标。
    • 适用场景:需要低延迟和高吞吐量的应用,特别适合大内存环境的系统。
    • 开启方法:启动 JVM 时添加参数 -XX:+UseZGC
  • Shenandoah GC:Shenandoah 是另一个低停顿时间的垃圾回收器,其设计目标是实现 GC 停顿时间与堆内存大小无关。它使用了并发循环引用的处理技术,提高了垃圾回收的效率。
    • 适用场景:适合需要较低 GC 停顿时间的交互式应用。
    • 开启方法:启动 JVM 时添加参数 -XX:+UseShenandoahGC

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1177027.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue中切换tab路由,提示this.$confirm确定和取消执行不同的逻辑

beforeRouteLeave (to, from, next) { // 离开页面 if (this.editFlag true) { this.$confirm(页面尚未保存,确认离开吗?, 提示, { distinguishCancelAndClose: true, // 区分取消和关闭 confirmButtonText: 确定, cancelButtonText: 取消, type: info }).then(()…

一文读懂RASP运行时防护平台及应用实践

「云原生安全既是一种全新安全理念,也是实现云战略的前提。 基于蚂蚁集团内部多年实践,云原生PaaS平台SOFAStack发布完整的软件供应链安全产品及解决方案,包括静态代码扫描Pinpoint,软件成分分析SCA,交互式安全测试IAS…

Git 安全警告修复手册:解决 `fatal: detected dubious ownership in repository at ` 问题 ️

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

打开运行ps提示找不到msvcp140.dll的解决方法分享

最近,我在安装Adobe Photoshop(简称PS)和Adobe Premiere Pro(简称PR)时遇到了一个困扰我很久的问题,即提示找不到msvcp140.dll文件。msvcp140.dll是Microsoft Visual C 2015 Redistributable的一个组件&…

MyBatis缓存详解

1. MyBatis缓存 MyBatis中的缓存是用来提高性能,减少数据库交互次数的机制。它分为一级缓存(Local Cache)和二级缓存(Global Cache)。 1.1 一级缓存(Local Cache) 作用范围:一级缓…

SpringBoot整合Kafka (一)

📑前言 本文主要讲了SpringBoot整合Kafka文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 🌄每日一句:…

数据库备份和恢复

备份: 完全备份 增量备份 完全备份:将整个数据库完整的进行备份。 增量备份:在完全备份的基础之上,对后续新增的内容进行备份。 备份的需求: 备份的需求: 1、在生产环境中,数据的安全至关重…

计算领域高质量科技期刊分级目录

最后需要文件的小伙伴可以私信我哦,也可以自行在官网下载

汽车网络安全渗透测试概述

目录 1.汽车网络安全法规概述 1.1 国外标准 1.2 国内标准 2.汽车网络安全威胁分析 2.1 汽车网络安全资产定义 2.2 汽车网络安全影响场景及评级示例 3.汽车网络安全渗透测试描述 3.1 参考法规 3.2 渗透测试内容 4.小结 1.汽车网络安全法规概述 近年来,汽车…

UE5——源码阅读——100——渲染——高清截图

创建事件,用于代码的调试 获取当前客户端所属的World 标记是否在进行重入绘制 是否开始缓存区可视化转存帧,主要针对请求屏幕截图或电影转存 判断是否需要高清截图 这下面这个函数执行高清截图 是否需要缓存区的可视化转存 判断是否开始渲染 如果…

总结Kibana DevTools如何操作elasticsearch的常用语句

一、操作es的工具 ElasticSearch HeadKibana DevToolsElasticHQ 本文主要是总结Kibana DevTools操作es的语句。 二、搜索文档 1、根据ID查询单个记录 GET /course_idx/_doc/course:202、term 匹配"name"字段的值为"6789999"的文档 类似于sql语句中的等…

自查看看自己转本复习中存在哪些问题

缺乏清晰、强力的奋斗目标 “我想考本科”只不过是一种笼统的泛化的模糊的专转本目标,对潜意识学习潜能的刺激力度不大。 专转本备考中,更需要一个恒久、量化、清晰、明确、具体的目标牵引自我潜意识去努力,克服学习中的重重困难。比如一所…

软件测试丨从外包到自研再到大厂——我是怎么从6k到25k的

功能测试:理论上说,该定位的测试人员应该是对业务需求理解最透彻的群体,专注于用户角度的测试,组织整体质量实践,分析测试运行结果,驱动测试执行。当然除了业务技能过硬,常用的测试工具也是必须…

VMware安装CentOS最小化开发环境导引

目录 一、概要 二、介绍 三、下载 四、安装 4.1 创建虚拟机 4.2 安装CentOS 五、配置网卡 六、配置本地安装源 七、安装软件 7.1 gcc/g 7.2 C的atomic库 7.3 java 7.4 Cmake 7.5 MariaDB客户端(兼容mysql) 八、用户配置文件.bash_profile…

Python小试牛刀:GUI(图形界面)实现计算器UI界面(三)

上一篇:Python小试牛刀:GUI(图形界面)实现计算器UI界面(二)-CSDN博客 回顾前两篇文章,第一篇文章主要实现了计算器UI界面如何布局,以及简单概述Python常用的GUI库。第二篇文章主要实现了计算器UI界面按钮组…

shiro-cve2016-4437漏洞复现

一、漏洞特征 Apache Shiro是一款开源强大且易用的Java安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。 因为在反序列化时,不会对其进行过滤,所以如果传入恶意代码将会造成安全问题 在 1.2.4 版本前, 加…

Disk Drill v5.3.1313(数据恢复备份)

Disk Drill是一款功能强大的数据恢复软件,它可以帮助用户恢复已删除、丢失、格式化或损坏的文件,并支持多种存储设备,包括计算机硬盘驱动器、外部硬盘、USB闪存驱动器、内存卡和其他存储介质。它和很多的文件系统都兼容,比如&…

如何快速搭建本地书库结合内网穿透实现公网随时远程访问

Kindle中国电子书店停运不要慌,十分钟搭建自己的在线书库随时随地看小说! 文章目录 Kindle中国电子书店停运不要慌,十分钟搭建自己的在线书库随时随地看小说!1.网络书库软件下载安装2.网络书库服务器设置3.内网穿透工具设置4.公网…

高压放大器在微机电工程中有哪些应用

高压放大器在微机电工程中有许多重要的应用。微机电工程是一种利用微电子加工技术制造微米级或纳米级机械结构并与电子元件集成的领域。高压放大器在MEMS领域发挥着关键的作用,下面将介绍几个高压放大器在MEMS工程中的应用。 MEMS驱动器:MEMS驱动器常用于…