【JVM】JVM的垃圾回收机制与垃圾回收器的选择

昨天说了JVM的工作流程,感兴趣的可以先去看一看。今天咱们接着来探讨JVM的垃圾回收机制,包括其工作原理、如何确定对象回收、可用的垃圾回收器以及如何进行垃圾回收器的选择与配置。

1.工作原理

JVM的垃圾回收机制主要依赖于垃圾回收器来自动管理内存的分配和回收。这个过程对于开发者来说是透明的,但了解其工作原理有助于优化应用程序的性能。

对象的创建与分配

  1. Java程序在执行过程中创建新对象,这些对象通常首先被分配到堆内存的新生代(Young Generation)的Eden区。
  2. 新生代由Eden区和两个Survivor区(S0和S1)组成,对象的创建和分配是连续进行的。

垃圾回收的触发

  1. 当Eden区满时,会触发Minor GC,这是一次针对新生代的垃圾回收操作。
  2. Minor GC过程中,不可达对象被标记并清除,而存活的对象可能被移动到Survivor区,或直接晋升到老年代。

对象晋升与老年代回收

  1. 经过多次Minor GC后,仍然存活的对象年龄增加,当达到一定年龄阈值时,这些对象会被晋升到老年代。
  2. 老年代中的对象通常存活时间更长,回收频率较低,但每次回收可能需要更长的时间。

Full GC的触发

  1. 当老年代空间不足或在特定条件下(如CMS GC中的并发模式失败)时,会触发Full GC。
  2. Full GC涉及整个堆内存的回收,包括新生代和老年代,旨在回收所有不可达对象所占用的内存。

2.如何确定对象回收

JVM通过可达性分析来确定对象是否可回收。这一过程涉及以下步骤:

  1. GC Roots的确定

    • GC Roots包括活跃线程的栈帧、静态变量、常量等,它们是可达性分析的起点。
    • 从GC Roots开始,通过引用链检查对象的可达性。
  2. 不可达对象的识别

    • 如果对象没有任何引用链连接到GC Roots,那么这些对象就被认为是不可达的,因此可以被回收。

3.垃圾回收器

JVM提供了多种垃圾回收器,每种都有其特定的优化目标和适用场景:

Serial GC

适用于单核处理器和小型应用,使用单线程进行垃圾回收。

在进行垃圾回收时会导致STW,但对小型应用影响较小。

Parallel GC

适用于多核处理器的服务器环境,使用多线程并行回收新生代。

旨在提高吞吐量,减少STW时间。

CMS (Concurrent Mark Sweep) GC

目标是最小化应用程序的停顿时间。

使用标记-清除算法,并发执行大部分垃圾回收工作。

G1 (Garbage-First) GC

适用于大堆内存和需要低延迟的服务器端应用。

将堆划分为多个区域,根据垃圾回收的价值来选择回收的区域。

4.垃圾回收器的选择与配置

选择合适的垃圾回收器需要考虑应用程序的特点和性能需求。例如:

-XX:+UseSerialGC:启用Serial GC,适用于单核处理器。

-XX:+UseParallelGC:启用Parallel GC,适用于多核处理器。

-XX:+UseConcMarkSweepGC:启用CMS GC,适用于对响应时间敏感的应用。

-XX:+UseG1GC:启用G1 GC,适用于大堆内存和需要可预测停顿时间的应用。

开发者还可以通过其他JVM参数来调整垃圾回收器的行为,如:

-Xms-Xmx:设置堆的初始大小和最大大小。

-XX:MaxGCPauseMillis:设置G1 GC的目标最大GC停顿时间。

-XX:ParallelGCThreads:设置Parallel GC的线程数。

通过监控工具(如VisualVM、JConsole)和GC日志分析,可以进一步优化垃圾回收器的配置,以提高应用程序的性能和稳定性。

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

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

相关文章

Cannot access ‘androidx.activity.FullyDrawnReporterOwner‘

Android Studio新建项目就报错: Cannot access ‘androidx.activity.FullyDrawnReporterOwner’ which is a supertype of ‘cn.dazhou.osddemo.MainActivity’. Check your module classpath for missing or conflicting dependencies 整个类都报错了。本来原来一直…

OpenCV-AMF算法(自适应中值滤波Adaptive Median Filtering)

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 实现原理 AMF(Adaptive Median Filter,自适应中值滤波)是一种用于图像处理和信号处理的滤波算…

了解.DevicData-P-XXXXXXXX勒索病毒,以及如何保护您的数据

导言: 随着网络技术的快速发展,网络安全问题日益凸显,其中勒索病毒成为了一种严重的网络安全威胁。在众多勒索病毒中,.DevicData-P-XXXXXXXX勒索病毒以其强大的加密能力和恶劣的勒索行为引起了广泛关注。本文将对该病毒进行详细介…

运维——1.网线接在家用无线路由器LAN口依然可以上网,什么原理

当你将网线连接到家用无线路由器的LAN口时,这种连接方式实际上是将路由器作为一个普通的网络交换机来使用。家用无线路由器通常具有多个LAN口,这些LAN口实际上就是一个内置的网络交换机,用于在局域网内连接多台设备。 无线路由器的LAN口连接…

蓝桥杯2024年第十五届省赛真题-R 格式(高精度乘法 + 加法)

本题链接:蓝桥杯2024年第十五届省赛真题-R 格式 - C语言网 题目:​​​​​​​ 样例: 输入 2 3.14 输出 13 思路: 根据题意,结合数据范围,这是一道模板的高精度乘以低精度问题。 题意是double 类型 d 与…

论文笔记:Time Travel in LLMs: Tracing Data Contamination in Large Language Models

iclr 2024 spotlight reviewer评分 688 1 intro 论文认为许多下游任务(例如,总结、自然语言推理、文本分类)上观察到的LLMs印象深刻的表现可能因数据污染而被夸大 所谓数据污染,即这些下游任务的测试数据出现在LLMs的预训练数据…

mac电脑软件 Magnet v2.14.0免激活中文版

Magnet是一款窗口管理工具,适用于Mac操作系统。它可以帮助用户轻松地管理和组织多个应用程序的窗口,提高工作效率。 Magnet支持多种窗口布局和组合方式,可以将窗口分为左右、上下、四分之一等不同的比例和位置,用户可以根据实际需…

Mac上的PD虚拟机安装parallels tools问题

本文主要记录mac上的虚拟机软件安装好centos7.9的时候安装parallels tools的错误的解决办法: Centos 7.9虚拟机安装parallels tools 前言 在centos高版本上安装parallells tools时会报错,具体错误信息可以在/var/log/parallels.log文件中查看。 本文…

阿里云Centos7下编译glibc

编译glibc 原来glibc版本 编译前需要的环境: CentOS7 gcc 8.3.0 gdb 8.3.0 make 4.0 binutils 2.39 (ld -v) python 3.6.8 其他看INSTALL, 但有些版本也不易太高 wget https://mirrors.aliyun.com/gnu/glibc/glibc-2.37.tar.gz tar -zxf glibc-2.37.tar.gz cd glibc-2.37/ …

Spring Boot 整合 Mockito:提升Java单元测试的高效实践

引言 在Java开发领域,Spring Boot因其便捷的配置和强大的功能而受到广泛欢迎,而Mockito作为一款成熟的单元测试模拟框架,则在提高测试质量、确保代码模块间解耦方面扮演着至关重要的角色。本文将详细介绍如何在Spring Boot项目中整合Mockito&…

c++总结笔记(一)

计算机可以将程序转化为二进制指令(即机器码),并由CPU执行,CPU会按照指令的顺序依次执行每个指令。 C语言特点: 简洁高效可移植模块化标准化 C语言的标准 C89(C90)标准C99标准C11标准 导入 使用include导入包含…

《R语言与农业数据统计分析及建模》学习——数据读入

一、工作目录 # 获取当前工作目录 getwd()# 改变工作目录为指定路径下的文件夹 # 注意工作目录的表达方式 setwd(D:/R_class) setwd(D:\\R_class) 二、文件路径 读取文件中的数据首先要确定文件路径,如果文件不在工作目录下,则必须使用绝对路径 1、文…

Nginx 负载均衡配置

负载均衡算法 1. 轮询 权重 (最为合理,常用) 2. ip_hash / n取模(n 节点个数) (移动端会因为网络,基站的变动,ip会变动。生产不推荐不用) 3. 最少访问 (记…

AI、AGI、AIGC、AI Agent、Prompt、LLM 名词解释

啊!ChatGPT 最近很火呀,你们说的 AGI、AIGC、AI Agent、Prompt、LLM … 到底是什么意思啊?还有 Midjourney、Lensa、Sora、DALL-E、Llama … 又是什么鬼? AI(Artificial Intelligence,人工智能&#xff09…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十二 简单图片添加水印效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十二 简单图片添加水印效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十二 简单图片添加水印效果 一、简单介绍 二、简单图片添加水印效果实现原理 三、简单图片添加水印效果案例…

解决VS2022创建项目只有解决方案看不到项目文件

问题:无法运行、看不到项目文件 解决: 检查环境变量是否正确

开源相机管理库Aravis例程学习(一)——单帧采集single-acquisition

开源相机管理库Aravis例程学习(一)——单帧采集single-acquisition 简介源码函数说明arv_camera_newarv_camera_acquisitionarv_camera_get_model_namearv_buffer_get_image_widtharv_buffer_get_image_height 简介 本文针对官方例程中的第一个例程&…

MVSplat:稀疏多视点图像的高效3D高斯溅射

MVSplat: Efficient 3D Gaussian Splatting from Sparse Multi-View Images MVSplat:稀疏多视点图像的高效3D高斯溅射 Yuedong Chen1  Haofei Xu2,3  Chuanxia Zheng4  Bohan Zhuang 粤东陈浩飞徐 2,3 郑传霞 4 庄伯涵1 Marc Pollefeys2,5  Andreas Geiger3  T…

breakpad编译

​​​​​​​https://chromium.googlesource.com/breakpad/breakpad//master 或者git hub上 在thirty-party/lss下拷贝下面头文件 https://chromium.googlesource.com/linux-syscall-support/ You can also cd to another directory and run configure from there to buil…

服务器上部署GPU版的milvus向量数据库

1、安装docker compose 我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址: https://github.com/docker/compose/releases sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-$(uname -s)…