JVM - 年轻代和老年代
通过一些问题来讨论 JVM 中年轻代和老年代的内容
- 为什么要区分年轻代和老年代?
- 哪些对像会进入老年代?
- 什么时候会进行年轻代GC?
- 什么时候会进行老年代GC?
1. 为什么要区分年轻代和老年代?
年轻代中的对象大部分都是短期存活的,老年代中的对象存活时间较长
而短期存活的对象,很快就会被垃圾回收线程回收。
考虑到两部分对象的垃圾回收时机不同,所以就要将其区分
年轻代有年轻代的垃圾回收算法,老年代有老年代的垃圾回收算法,“因地制宜”
2. 哪些对象会进入老年代
我们分为 Young GC 之前和 Young GC 来说
Young GC之前,如果加入堆内存的对象足够大,则直接进入老年代,可通过 JVM 参数 “-XX:PretenureSizeThreshold” 来设置这个值,单位是字节
比如 “-XX:PretenureSizeThreshold” 的值设为 “1048576” 字节,而你创建了一个大小大于这个数的对象,比如一个超大的数组,此时就直接将这个大对象放到老年代里去
Young GC 之后,则有多种情况
如果对象已经经历了15次 GC,即对象年龄已经达到 15,则会被转移到老年代
还有一种动态对象年龄判断,不需要对象年龄达到 15 也可以进入老年代。大致规则就是,假设当前放对象的 Survivor 区中,有一批对象的总大小大于了这块区域的 50%,则所有年龄大于等于这批对象年龄的对象,都可以直接进入老年代
无论是年龄大于 15,还是动态对象年龄判断,都是为了那些可以长期存活的对象尽早地进入到老年代
还有,如果 GC 过后,存活对象的大小大于 Survivor 可用空间,则这些对象也会直接进入到老年代
3. 什么时候会进行年轻代 GC
这里年轻代 GC,认为是 Young GC
当年轻代中的 Eden 区中区域不够用时,则会触发年轻代 GC
4. 什么时候会进行老年代 GC
这里老年代 GC,认为是 Full GC
每一次 Minor GC 之前,会检查老年代老年代可用空间是否大于年轻代所有对象大小,因为可能 GC 之后,所有的年轻代对象都存活下来了。如果小于的话,则还要判断是否打开了 "-XX:-HandlePromotionFailure"的参数设置
如果没打开这个参数,则直接进行 Full GC
否则打开了的话, 则就看老年代内存大小,是否大于之前每一次 Minor GC 后进入老年代对象的平均大小。小于的话,则会进行 Full GC
这是 Minor GC 之前做的判断。
如果 Minor GC 之后,存活对象大小大于 Survivor 可用空间,也大于老年代可用空间,也会进行 Full GC
诚恳欢迎大家提出意见Orz
......(待续未完
相关文章:
JVM - 年轻代和老年代
通过一些问题来讨论 JVM 中年轻代和老年代的内容 为什么要区分年轻代和老年代?哪些对像会进入老年代?什么时候会进行年轻代GC?什么时候会进行老年代GC? 1. 为什么要区分年轻代和老年代? 年轻代中的对象大部分都是短期…...
【C++初阶】---类和对象(上)
1.类的定义 1.1类的定义格式 • class为定义类的关键字,Data为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。 •…...
【数据库事务、消息队列事务、Redis 事务、Spring 事务 详细分析】
数据库事务、消息队列事务、Redis 事务、Spring 事务** 的详细分析 在分布式系统和应用开发中,事务管理是确保数据一致性和可靠性的关键机制。以下是针对 数据库事务、消息队列事务、Redis 事务、Spring 事务 的详细分析,包括原理、特点、适用场景和对比…...
2-1 基本放大电路
放大的概念 mV →V mA→A 特征:放大功率(电压与电流)。 本质:能量在控制下的转换。(外接供电电源) 必要条件:有源元件(能量控制原件) 前提:不失真 测试的…...
什么是矩阵账号
矩阵账号是指在同一平台或多个平台上,围绕同一品牌或个人,创建的多个相互关联、协同工作的账号组合。这些账号虽然独立,但在内容定位和运营策略上有所区分,同时又相互引流,共同形成一个网络结构,类似于矩阵…...
【Linux】Ubuntu 24.04 LTS 安装 OpenJDK 8
目录 通过 apt-get 直接安装 JDK 1. 更新 apt 软件源 2. 检查 JDK 是否已安装 3. 安装OpenJDK 4. 检查 JDK 是否成功安装 5. 设置 JAVA_HOME 环境变量 找到需要设置的 Java 路径 使用文本编辑器打开/etc/environment文件 添加 Java 安装路径 应用更改和验证配置 通过…...
xcode开发swiftui项目的时候,怎么调试ui占位和ui大小
有时候元素之间可能存在很大的空间间隔,但是又不知道怎么产生的,无奈我又看不懂xcode里面的Debug View Hierarchy功能,只能使用笨方法,就是给不同的块元素设置上不同的背景色,然后看一下间隙区域到底是哪个背景色填充的…...
测试用例的优先级划分规则
测试用例的优先级划分是根据 业务重要性、风险程度、测试资源 等因素,确定测试执行的顺序,以最大化测试效率和风险控制。以下是常见的优先级划分规则和操作方法: 一、优先级划分的核心原则 风险驱动 高风险功能(如核心支付流程&a…...
信息安全的数学本质与工程实践
信息安全的本质是数学理论与工程实践的高度统一。在这个数字空间与物理世界深度融合的时代,信息安全已从简单的数据保护演变为维系数字社会正常运转的基础设施。对于计算机专业学习者而言,理解信息安全需要超越工具化认知,深入其数学内核与系…...
第 6 章:优化动态分配内存的变量_《C++性能优化指南》_notes
优化动态分配内存的变量 第六章核心知识点详解总结第六章 动态内存优化 重点难点梳理 一、多选题(每题至少2个正确答案)二、设计题答案与详解多选题答案设计题答案示例 第六章核心知识点详解 动态内存分配的开销 知识点:动态内存分配需要调用…...
k8s kubernetes dashboard一直CarshLoopBackoff
使用 kubectl get pods -A -o wide 发现pod一直CarshLoopBackoff 通过 kubectl describe pod kubernetes-dashboard-7c4f8ff86d-7k7bd -n kubernetes-dashboard 获取详细信息 发现一直报错 Warning Unhealthy 10m (x31 over 34m) kubelet Liveness probe fail…...
[C++面试] 你了解视图吗?
一、入门 1、什么是 C 视图(View)?请简要说明其概念和用途 它提供了对序列(如数组、容器等)的非拥有性、只读或可写的访问。(就像是个透明的放大镜,它能让你去看一组数据,但它自己…...
Vue3 项目通过 docxtemplater 插件动态渲染 .docx 文档(带图片)预览,并导出
Vue3 项目通过 docxtemplater 插件动态渲染 .docx 文档(带图片)预览,并导出 预览安装插件示例代码项目目录结构截图实际效果截图 动态渲染 .docx 文档(带图片),预览、导出安装插件docx 模板文件内容完整代码…...
ollama迁移已下载的单个模型到服务器
ollama迁移已下载的单个模型到服务器 场景 ollama是面向用户级的,部署和运行都很简单,是否高效就另说了。但最起码,他能充分利用用户的硬件设备,在GPU不足也能调用cpu和内存去加持。 ollama运行的模型基本是量化版本的…...
Photoshop 2025安装教程包含下载安装包,2025最新版图文安装教程
文章目录 前言一、Photoshop 2025下载二、Photoshop 2025安装教程1. 安装包解压2. 找到安装程序3. 以管理员身份运行4. 安装选项设置5. 选择安装路径6. 开始安装7. 安装完成8. 启动软件9. 软件主界面 前言 无论你是专业设计师,还是刚接触图像处理的新手,…...
【Python · PyTorch】时域卷积网络 TCN
1. 概念 1.1 定义 TCN 是时域卷积网络(Temporal Convolutional Network)的简称。TCN是于2018年 Shaojie Bai 等人提出的一个处理时序数据的卷积模型。 TCN结合了CNN卷积并行性计算和RNN长期依赖的优势,CNN可在多个通道同时处理卷积核运算&…...
Mysql update更新数据执行流程
update 的执行流程是以select查询为基础执行的!!你不明白select执行流程?没关系,这篇博客照样让你明白,update执行流程! 存储引擎是什么? 如果把数据库比作一个大仓库,那么存储引擎…...
WMS WCS系统架构
1.1立体仓库现场网络架构图 1.2立体仓库WMS系统与WCS系统架构 1.3系统技术选型 WEB端技术:node.js、vue 、element、jquery、html、js、css等 API端技术:spring boot 、msyql、redis、mybatis等 WCS技术:c#、winform、OPC、socket、S7等 …...
数据结构5(初):续写排序
目录 1、外排序 2、计数排序 1、外排序 上一节中提到的排序都可以用来进行内排序,但是只有归并排序的思想可以用来进行外部排序,因为文件数据是没办法像数组那样进行访问的。 例如: #include <stdio.h> #include <assert.h> …...
ROS多机通信(三)——Ubuntu Ad-Hoc 组网通信配置指南
基本概念 Ad-Hoc 网络是一种简单的点对点无线网络,设备(称为节点)可以直接相互通信或者通过中继间接通信,而无需依赖中央接入点。在这种网络中,所有设备是对等的,没有固定的路由器或基础设施支持。 特点 …...
23种设计模式-状态(State)设计模式
状态设计模式 🚩什么是状态设计模式?🚩状态设计模式的特点🚩状态设计模式的结构🚩状态设计模式的优缺点🚩状态设计模式的Java实现🚩代码总结🚩总结 🚩什么是状态设计模式…...
ARM架构薄记2——ARM学习架构抓手(以ARMv7为例子)
ARM架构薄记2——ARM学习架构抓手(以ARMv7为例子) 架构学习需要学习哪一些部分呢?笔者接触过的架构有Intel-X86, AMD64,RISC-V和Arm架构(V7最多),笔者简单的翻了一些课本和教材,…...
STM32C011 进入停止模式和待机模式
对于STM32C011J4M3微控制器,你可以使用HAL库来实现进入停止模式(Stop Mode)和待机模式(Standby Mode)。下面是进入停止模式和待机模式的示例代码: 进入停止模式代码示例: #include "stm3…...
kaggle上经典泰坦尼克项目数据分析探索
之前了解在kaggle上这个项目很火,最近想要加强一下python数据分析,所以在kaggle上找到这个项目进行学习探索,下面是将一些学习资料以及过程整理出来。 一、首先我们了解一下项目背景以及如何找到这个项目。 kaggle项目地址: https://www.k…...
影刀魔法指令3.0:开启自动化新篇章
在数字化飞速发展的今天,自动化工具已经成为提升工作效率、优化工作流程的重要手段。影刀RPA作为一款强大的自动化软件,其最近推出的魔法指令3.0版本,更是让人大开眼界,为自动化操作带来了全新的可能性。 影刀魔法指令3.0简介 影…...
15 python 数据容器-字典
在 Python 的编程世界里,字典是一种超实用的数据类型,它就像打工人的工作资料夹,能把各种不同类型的信息有条理地存起来,还能快速找到你需要的内容。对于刚开始学习编程的小伙伴来说,掌握字典的用法,能让你…...
Linux的一些常见指令
一、ls指令 语法: ls (选项) 功能: ls可以查看当前目录下的所有文件和目录。 常用选项: -a:列出目录下的所有文件,包括以点(.)开头的隐含文件 。-d:将目录像文件一样显示,不显示其下的文件。…...
Pre-flash和Main flash
在相机拍照过程中,Pre-flash(预闪光) 和 Main flash(主闪光) 是常见的两种闪光灯使用模式,通常用于提高低光环境下的拍摄质量,尤其在自动曝光(AE)和自动对焦(…...
jmm-java内存模型
java内存模型----底层原理 底层原理 从Java代码到最终执行的CPU指令的流程: 最开始,我们编写的Java代码,是*.java文件在编译(javac命令)后,从刚才的*.java文件会变出一个新的Java字节码文件(…...
合宙780E开发学习-LUATOS-SOC云编译自定义固件
登录https://luatos.com 点击登录,使用合宙erp账号登录即可 点击右上角构建,点击右上角菜单新构建,自定义构建名称,可新建多个 勾选想要的组件 点击右上角保存修改,只有点击准备就绪(注意:一定…...
