JVM可用的垃圾回收器

news/2025/2/27 1:52:50

个人博客地址:JVM可用的垃圾回收器 | 一张假钞的真实世界

垃圾收集器分类

Java HotSpot VM有三种不同类型的收集器,每种收集器具有不同的性能特征。

  • 串行收集器使用单个线程来执行所有垃圾收集工作,这使得它相对高效,因为线程之间没有通信开销。它最适合单处理器机器,因为它不能利用多处理器硬件,尽管它对于具有小数据集(最多约100MB)的应用程序在多处理器上很有用。在某些硬件和操作系统配置上默认选择串行收集器,或者可以使用选项显式启用-XX:+UseSerialGC。
  • 并行收集器(也称为吞吐量收集器)并行执行次要收集,这可以显著减少垃圾收集开销。它适用于在多处理器或多线程硬件上运行的具有中型到大型数据集的应用程序。并行收集器在某些硬件和操作系统配置上默认选择,或者可以使用选项显式启用-XX:+UseParallelGC。并行压缩是一个特性,它使并行收集器能够并行执行主要收集。如果没有并行压缩,主要收集是使用单个线程执行的,这会显着限制可伸缩性。如果-XX:+UseParallelGC已指定该选项,则默认情况下启用并行压缩。关闭它的选项是-XX:-UseParallelOldGC。
  • 大多数并发收集器并发地执行其大部分工作(例如,当应用程序仍在运行时)以保持垃圾收集暂停较短。它专为具有中型到大型数据集的应用程序而设计,其中响应时间比总吞吐量更重要,因为用于最小化暂停的技术会降低应用程序性能。Java HotSpot VM提供了两个主要并发收集器之间的选择;请参阅主要的并发收集器。使用该选项-XX:+UseConcMarkSweepGC启用CMS收集器或-XX:+UseG1GC启用G1收集器。

选择垃圾收集器

除非您的应用程序对暂停时间有相当严格的要求,否则首先运行您的应用程序并允许VM选择垃圾收集器。如有必要,调整堆大小以提高性能。如果性能仍不能满足您的目标,请使用以下指南作为选择收集器的起点。

  • 如果应用程序的数据集很小(最多大约100MB),则使用-XX:+UseSerialGC选项选择串行收集器。
  • 如果应用程序将在单个处理器上运行并且没有暂停时间要求,那么让VM选择收集器,或者使用-XX:+UseSerialGC选项选择串行收集器。
  • 如果同时满足以下两点,那么让VM选择收集器,或者使用-XX:+UseParallelGC选项选择并行收集器。
    • 使应用程序达到最高的性能是第一优先级
    • 没有暂停时间要求或1秒及更长的暂停是可以接受的
  • 如果响应时间比总吞吐量更重要并且垃圾收集暂停必须保持短于大约1秒,则使用-XX:+UseConcMarkSweepGC或-XX:+UseG1GC选项选择并发收集器。

这些指南仅提供了选择收集器的起点,因为性能取决于堆的大小、应用程序维护的实时数据量以及可用处理器的数量和速度。暂停时间对这些因素特别敏感,因此前面提到的1秒阈值只是一个近似值:并行收集器在很多数据大小和硬件组合上会遇到超过1秒的暂停时间;相反,并发收集器可能无法在某些硬件组合上保持短于1秒的暂停。

如果推荐的收集器没有达到所需的性能,首先尝试调整堆和代大小以满足所需的目标。如果性能仍然不足,则尝试不同的收集器:使用并发收集器减少暂停时间并使用并行收集器增加多处理器硬件上的总体吞吐量。


http://www.niftyadmin.cn/n/5869365.html

相关文章

C#实现本地AI聊天功能(Deepseek R1及其他模型)。

前言 1、C#实现本地AI聊天功能 WPFOllamaSharpe实现本地聊天功能,可以选择使用Deepseek 及其他模型。 2、此程序默认你已经安装好了Ollama。 在运行前需要线安装好Ollama,如何安装请自行搜索 Ollama下载地址: https://ollama.org.cn Ollama模型下载地址&#xf…

【NLP 27、文本分类任务 —— 传统机器学习算法】

不要抓着枯叶哭泣,你要等待初春的新芽 —— 25.1.23 一、文本分类任务 定义:预先设定好一个文本类别集合,对于一篇文本,预测其所属的类别 例如: 情感分析: 这家饭店太难吃了 —> 正类 …

Python数据分析 NumPy矩阵与通用函数及统计分析 ② 第二节

NumPy矩阵与通用函数及统计分析案例 NumPy矩阵与通用函数及统计分析一、掌握NumPy矩阵与通用函数代码 2 - 30:矩阵的创建代码 2 - 31:数组的创建与组合代码 2 - 32:矩阵的运算代码 2 - 33:矩阵的转置、逆矩阵和二维数组视图代码 2…

【uniapp-Vue3】beforeRegister在注册用户入库前设置初始用户

关于uniCloud的beforeRegister钩子的具体介绍和用法在下面: uniCloudhttps://doc.dcloud.net.cn/uniCloud/uni-id/summary.html#before-register首先在uniCloud/cloudfunctions/common/uni-config-center/uni-id中创建hooks文件,再创建index.js文件 在…

CSS实现一张简易的贺卡

效果 当你把鼠标移至贺卡上时&#xff0c;贺卡会缓慢打开。 代码如下 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&q…

前端监控与埋点

一、概念 前端埋点是指在网页或者应用程序中插入特定的代码&#xff0c;用于收集用户的行为数据并发送给服务器进行分析。这些数据可以包括用户的点击、浏览、输入等操作&#xff0c;帮助开发者了解用户在其网站中的行为&#xff0c;从而进行针对性的优化和改进。 前端埋点通…

tableau之网络图和弧线图

一、网络图 概念 网络图&#xff08;Network Graph&#xff09;&#xff0c;也称为网络可视化&#xff0c;是数据可视化的一种形式&#xff0c;用于显示实体&#xff08;节点&#xff09;之间的关系&#xff08;边&#xff09;。这种图表通过节点和边的结构揭示数据中的复杂关…

【愚公系列】《Python网络爬虫从入门到精通》034-DataFrame简单数据计算整理

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…