JVM中的GC过程
堆内存结构:在详细讨论GC过程之前,需要了解JVM堆内存的结构。JVM堆内存通常被分为新生代(Young Generation)和老年代(Old Generation),其中新生代又进一步细分为Eden区(Eden Space)和两个Survivor区(S0和S1,也称为From和To区)。从JDK 1.8开始,永久代(Permanent Generation)被元空间(Metaspace)所取代。
-
GC过程:GC过程主要集中在堆内存上,特别是新生代和老年代。新生代中的GC通常称为Minor GC或Young GC,而老年代中的GC则称为Major GC或Full GC。
-
Minor GC(Young GC):Minor GC主要发生在新生代,其过程大致如下:
-
对象分配:新创建的对象首先被分配到Eden区。
-
Eden区满:当Eden区空间不足时,会触发Minor GC
-
可达性分析:通过可达性分析算法(如根搜索算法)找到存活的对象
-
复制与清除:将Eden区中的存活对象复制到其中一个Survivor区(如S0),同时清空Eden区。如果Survivor区放不下,则部分对象会晋升到老年代
-
Survivor区交换:在后续的GC中,Eden区和之前存放存活对象的Survivor区(如S0)中的存活对象会被复制到另一个Survivor区(如S1),同时清空这两个区。Survivor区之间会进行角色互换。
-
年龄晋升:对象在Survivor区每经过一次GC,其年龄就增加1。当对象达到一定年龄(默认是15,可通过-XX:MaxTenuringThreshold设置)后,会被晋升到老年代。
-
-
Major GC(Full GC):Major GC主要发生在老年代,其触发条件包括:
-
老年代空间不足:当老年代空间不足以存放晋升的对象时,会触发Major GC。
-
显式调用:程序中显式调用
System.gc()方法时,会建议JVM执行Full GC,但JVM不一定会立即执行。 -
其他情况:如元空间不足、永久代空间不足(在JDK 1.8之前)等,也可能触发Full GC。
Major GC的过程通常比Minor GC更复杂,耗时也更长,因为它需要处理的对象更多,且存活率较高。Major GC采用的算法可能包括标记-清除、标记-整理等。
-
-
-
GC算法
GC过程中使用的算法主要有以下几种:
-
标记-清除(Mark-Sweep):首先标记出所有需要回收的对象,然后统一回收这些对象。这种方法简单但会产生内存碎片。
-
复制(Copying):将内存分为大小相等的两块,每次只使用其中一块。当这块内存用完时,将存活的对象复制到另一块上,然后清空当前块。这种方法解决了内存碎片问题,但代价是内存使用率降低。
-
标记-整理(Mark-Compact):标记出所有需要回收的对象,然后让所有存活的对象都向一端移动,最后清理掉边界以外的内存。这种方法既解决了内存碎片问题,又提高了内存使用率。
-
-
GC对性能的影响
GC过程中会暂停所有Java执行线程(也称为Stop-The-World),这会对系统性能造成一定影响。为了减少这种影响,现代JVM采用了多种优化技术,如增量GC、并发GC等。
相关文章:
JVM中的GC过程
堆内存结构:在详细讨论GC过程之前,需要了解JVM堆内存的结构。JVM堆内存通常被分为新生代(Young Generation)和老年代(Old Generation),其中新生代又进一步细分为Eden区(Eden Space&a…...
Python实战项目:天气数据爬取+数据可视化(完整代码)_python爬虫实战
一、选题的背景 随着人们对天气的关注逐渐增加,天气预报数据的获取与可视化成为了当今的热门话题,天气预报我们每天都会关注,天气情况会影响到我们日常的增减衣物、出行安排等。每天的气温、相对湿度、降水量以及风向风速是关注的焦点。通过…...
FFmpeg源码:compute_frame_duration函数分析
一、compute_frame_duration函数的定义 compute_frame_duration函数定义在FFmpeg源码(本文演示用的FFmpeg源码版本为7.0.1)的源文件libavformat/demux.c中: /*** Return the frame duration in seconds. Return 0 if not available.*/ stat…...
ARM 异常处理(21)
异常的流程: 首先: 在硬件上阶段: 这里是4大步3小步 然后是 异常处理: 这里主要是保存现场,进行异常处理 然后是 异常返回: 主要指 恢复现场, 再跳转回去。 首先硬件上ÿ…...
我开源了我的新闻网站项目
🎉 前言 暑假时写了一个Web项目,感觉做的还是有模有样的,不仅做了前端,还加了后端并连了数据库。最近也是将它开源了,一来是为了熟悉一下Github流程和Git使用命令,二来也是想和大家分享一下自己的成果&…...
LlamaIndex 使用 RouterOutputAgentWorkflow
LlamaIndex 中提供了一个 RouterOutputAgentWorkflow 功能,可以集成多个 QueryTool,根据用户的输入判断使用那个 QueryEngine,在做查询的时候,可以从不同的数据源进行查询,例如确定的数据从数据库查询,如果…...
设计模式学习-责任链模式
概念 使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止. 代码编写 using UnityEngine; using System.Collections; public class ChainOfResp…...
【全网最全】2024年数学建模国赛B题31页完整建模过程+成品论文+matlab/python代码等(后续会更新
您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片,那是获取资料的入口! 2024数学建模国赛B题 【全网最全】2024年数学建模国赛B题31页完整建模过程成品论文matlab/python代码等(后续会更新「首先来看看目前已有的资料…...
第二十一届华为杯数学建模经验分享之资料分享篇
今天给大家分享一些数学建模的资料,通过这些资料的学习相信你们一定在比赛中获得好的成绩。今天分享的资料包括美赛和国赛的优秀论文集、研赛的优秀论文集、推荐数学建模的相关书籍、智能算法的学习PPT、python机器学习的书籍和数学建模经验分享与总结,其…...
使用 OpenSSL 创建自签名证书
mkdir -p /etc/nginx/conf.d/cert #2、创建私钥 openssl genrsa -des3 -out https.key 1024 提示输入字符: 输入字符:rancher [rootocean-app-1a-01 cert]# openssl genrsa -des3 -out https.key 1024 Generating RSA private key, 1024 bit long modulu…...
EmguCV学习笔记 VB.Net 9.1 VideoCapture类
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…...
Rspack 1.0 发布了!
文章来源|Rspack Team 项目地址|https://github.com/web-infra-dev/rspack Rspack 是基于 Rust 编写的下一代 JavaScript 打包工具, 兼容 webpack 的 API 和生态,并提供 10 倍于 webpack 的构建性能。 在 18 个月前,我…...
【全网最全】2024年数学建模国赛E题超详细保奖思路+可视化图表+成品论文+matlab/python代码等(后续会更新
您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片,那是获取资料的入口! 【全网最全】2024年数学建模国赛E题成品论文超详细保奖思路可视化图表matlab/python代码等(后续会更新「首先来看看目前已有的资料,还…...
数智转型,看JNPF如何成为企业的必备工具
随着数字化转型的浪潮席卷全球,企业面临着前所未有的挑战与机遇。在这一过程中,低代码开发平台作为一种创新的软件开发方式,正逐渐成为企业实现快速迭代和敏捷开发的关键工具。JNPF作为一款领先的低代码开发平台,凭借其强大的功能…...
ArcGIS Pro 发布松散型切片
使用ArcGIS Pro发布松散型切片问题,有时候会出现切片方案写了松散型,但是自动切片完成后依然是紧凑型的问题,这时候可以采用手动修改然后再切片的方式。 1. 发布切片服务 选择手动切片方式 2. 手动修改服务的切片方案文件 修改cache服务…...
奖项再+1!通义灵码智能编码助手通过可信 AI 智能编码工具评估,获当前最高等级
阿里云的通义灵码智能编码助手参与中国信通院组织的可信AI智能编码工具首轮评估,最终获得 4 级评级,成为国内首批通过该项评估并获得当前最高评级的企业之一。 此次评估以《智能化软件工程技术和应用要求 第 2 部分:智能开发能力》为依据&…...
如何使用 yum 在 CentOS 6 上安装 nginx
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 状态 状态: 已弃用 本文涵盖的 CentOS 版本已不再受支持。如果您目前正在运行 CentOS 6 服务器,我们强烈建议升…...
F12抓包05:Network接口测试(抓包篡改请求)
课程大纲 使用线上接口测试网站演示操作,浏览器F12检查工具如何进行简单的接口测试:抓包、复制请求、篡改数据、发送新请求。 测试地址:https://httpbin.org/forms/post ① 抓包:鼠标右键打开“检查”工具(F12…...
OPenCV结构分析与形状描述符(4)计算一个旋转矩形的四个顶点的函数boxPoints()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 找到一个旋转矩形的四个顶点。对于绘制旋转矩形很有用。 该函数找到一个旋转矩形的四个顶点。这个函数对于绘制矩形很有帮助。在C中,…...
【Matplotlib】利用Python进行绘图!(python数据分析与可视化)
文章开始前打个小广告——分享一份Python学习大礼包(激活码安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程)点击领取,100%免费! 【Matplotlib】 教程&…...
BUCK变换器断续模式实战:从公式推导到MATLAB仿真验证(附代码)
BUCK变换器断续模式实战:从公式推导到MATLAB仿真验证(附代码) 在电力电子领域,BUCK变换器作为最基础的降压型拓扑结构,其工作模式的理解直接影响着电源设计的可靠性。许多初学者往往对断续模式(DCM)的特性感到困惑——…...
内存泄漏的定位技巧:以Java应用为例
在复杂的软件系统中,内存泄漏犹如一颗隐形的定时炸弹,其破坏力随着系统运行时间的增长而累积。对于软件测试从业者而言,掌握高效、精准的内存泄漏定位技巧,不仅是保障系统稳定性的关键,更是提升测试深度与专业性的重要…...
性能分析定界(OpenHarmony平台)指南
性能分析定界指南 前置条件 OpenHarmony Next系统前台运行Flutter页面分析工具 DevEco Studio Profiler SmartPerf Flutter线程介绍 Flutter 使用多个线程来完成其必要的工作,图层中仅展示了其中两个线程。你写的所有 Dart 代码都在 UI 线程上运行。尽管你没有直…...
PyTorch3D在Windows上安装总报错?试试这个绕过源码编译的Pip直装方案(适配PyTorch 2.0.1 + CUDA 11.7)
PyTorch3D在Windows上安装总报错?试试这个绕过源码编译的Pip直装方案(适配PyTorch 2.0.1 CUDA 11.7) 如果你是一名在Windows平台上进行3D视觉研究的开发者,想必对PyTorch3D这个强大的3D深度学习库并不陌生。然而,官方…...
【Dify】无网络环境下的Dify部署指南:从在线到离线的无缝迁移
1. 为什么需要离线部署Dify? 在企业级应用场景中,数据安全和网络隔离是刚需。很多金融、政务、医疗机构的服务器都部署在内网环境,完全与互联网物理隔离。这时候如果想使用Dify这样的AI应用开发平台,常规的在线安装方式就完全行不…...
CSS如何实现阴影效果_使用box-shadow不占用盒模型空间
box-shadow 不会撑开容器因其仅属绘制层视觉效果,不参与盒模型计算,不影响宽高与布局流;多层阴影用逗号分隔,后写者在上;高DPR下模糊变粗是抗锯齿所致;drop-shadow基于Alpha通道,适配形状而box-…...
手把手教你用Python实现TOTP动态验证码生成器(附完整代码)
用Python构建TOTP动态验证码生成器的实战指南 1. 为什么需要TOTP动态验证码? 在数字身份安全领域,传统的用户名密码组合已经无法满足现代安全需求。根据Verizon《2023年数据泄露调查报告》,超过80%的黑客攻击利用了弱密码或被盗凭证。这就是为…...
Qwen3.5-2B模型在Web开发中的创新应用:智能内容生成与审核
Qwen3.5-2B模型在Web开发中的创新应用:智能内容生成与审核 1. 引言:当Web开发遇上AI内容生成 想象一下这样的场景:用户上传了几张旅行照片,系统自动生成了一篇图文并茂的游记草稿;或者社区平台能够实时审核用户上传的…...
如何将SHADERed着色器项目快速转换为C++代码:完整导出指南
如何将SHADERed着色器项目快速转换为C代码:完整导出指南 【免费下载链接】SHADERed Lightweight, cross-platform & full-featured shader IDE 项目地址: https://gitcode.com/gh_mirrors/sh/SHADERed SHADERed是一款轻量级、跨平台且功能齐全的着色器ID…...
BFS算法
题目解题思路代码#include <iostream> #include <queue> #include <cstring> using namespace std;typedef pair<int,int> PII; const int N410; int n,m,x,y; int dist[N][N];// 骑士8个移动方向 int dx[]{1,2,2,1,-1,-2,-2,-1}; int dy[]{2,1,-1…...
