当前位置: 首页 > news >正文

JVM那些事——垃圾回收和内存分配

内存分配

在这里插入图片描述
默认情况下新生代和老年区的内存比例是1:2,新生代中Eden区和Survivor区的比例是8:1。

  1. 对象优先分配在Eden区。
  2. 大对象直接进入老年区。通过-XX:PertenureizeThreshold参数设置临界值。
  3. 长期存活的对象进入老年区。对象每熬过一次Minor GC,年龄+1,当年龄增加到一定程度(默认15岁)就会进入老年区。-XX:MaxTenuringThreshold设置年龄临界值。
  4. 如果Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一办,年龄大于或等于该年龄的对象直接进入老年区。

何时发生GC及空间分配担保

Eden区没有足够空间分配内存时,发生Minor GC.

Minor GC:指发生在新生代的GC动作。一般速度迅速。
Major GC /Full GC:值发生在老年代的GC,一般速度比Minor GC慢上10倍。

在Minor GC之前,JVM会先检查老年代最大可用连续空间是否大于新生代所有对象总空间,如果成立,那么MinorGC可以确保是安全的。否则,查看HandlePromotionFailure设置值是否允许担保失败,如果允许会尝试进行MinorGC,否则会进行一次FullGC。

对象是否死去?

引用计数法

给对象中添加一个引用计数器,每当一个地方引用时计数器就加1,当引用失效时,计数器减1。当计数器值为0的时候,这个对象将不可能被引用,则判断该对象死亡。

  • 弊端:会出现循环引用而导致无法GC的情况。

可达性分析算法

通过一个根节点GC Roots向下搜索,当一个对象无法从GC Roots搜索到时,则证明此对象是可不用的。

引用

  • 强引用:有引用,绝不回收。
  • 软引用:在系统将要发生OOM之前,将对象纳入回收范围,如果这次回收有足够内存,则在下一次GC时进行回收。
  • 弱引用:GC时,无论当前内存是否足够,都会被回收掉。
  • 虚引用:和没有引用没有用多大区别,只是能在对象被GC时收到一个系统通知。

finalize

一个对象的死亡需要经历至少两次标记过程,在可达性分析时不可达则会进行第一次标记,并且进行一次筛选,筛选条件就是该对象是否有必要执行finalize()方法,当对象没有覆盖finalize方法,或finalize方法已经被JVM调用过了,JVM则任务该对象没有执行finalize的必要了。如果该对象有必要执行finalize方法,则该对象会被放到一个F-Queue队列中,稍后交由一个JVM自动建立的低优先级的Finalizer线程执行注意:这里智慧触发这个方法,并不保证会等待它运行结束。如果该对象在finalize执行中成功将自己关联到GC Root链上,JVM则会在第二次标记过程中将该对象从即将回收的集合中移除。

垃圾回收算法

标记 - 清除算法

算法分两个节点,标记阶段将要回收的对象进行标记,回收阶段直接将标记的内存进行回收。

  • 缺点:1. 标记和清除阶段的效率都不高。2.标记清除后会产生大量不连续内存碎片。

复制算法

将内存分成大小相等的两块,每次使用其中一块,当这块内存快使用完时,将还存活的对象复制到另一块上。

  • 缺点:内存缩小了一半。
    实际中发现不需要按1:1划分,默认情况下,JVM将年轻代按8:1:1分成eden、survivor1和survivor2三块。每次GC时,将Eden和其中一块Survivor中还活着的对象一次性复制到另一块Survivor上,最后清理掉Eden和刚才用过的Survivor的空间。当survivor空间不够时,由老年代内存进行分配担保,也就是将对象放到老年代中。

标记-整理算法

标记死去的对象,清除后将活着的对象整理在一起。

分代收集算法

新生代和老年代,不同的内存区域采用不同的收集算法。

GC日志

配置-XX:+PrintGCDetails参数,JVM会在发生GC时打印GC日志。
33.125: 1 [GC2 (Allocation Failure)[PSYoungGen3: 21096K->32K(22528K)4] 22608K->1543K(91136K)5,0.0008844 secs]6[Times: user=0.00 sys=0.00, real=0.00 secs]

在这里插入图片描述


  1. GC发生的时间。距离JVM启动的秒数。 ↩︎

  2. 说明这次GC的停顿类型。[Full GC 一般是因为出现了分配担保失败之类的问题导致STW。 ↩︎

  3. 表明GC发生的区域。 ↩︎

  4. GC前该内存区域已使用容量->GC后该内存区域已使用容量(该区域总容量) ↩︎

  5. GC前JAVA堆已使用容量->GC后JAVA堆已使用容量(Java堆总容量) ↩︎

  6. GC所占用时间。单位秒 ↩︎

相关文章:

JVM那些事——垃圾回收和内存分配

内存分配 默认情况下新生代和老年区的内存比例是1:2,新生代中Eden区和Survivor区的比例是8:1。 对象优先分配在Eden区。大对象直接进入老年区。通过-XX:PertenureizeThreshold参数设置临界值。长期存活的对象进入老年区。对象每熬过一次Minor GC,年龄1&…...

什么牌的运动耳机比较好、运动耳机排行榜10强

现在运动健身的潮流持续不下,而且人们长期坐于办公室办公,严重影响身体的健康,这时不论是去健身房锻炼,还是户外跑步都是非常必要的了,而蓝牙耳机作为运动必备的一款数码产品,更是受到了大家的青睐&#xf…...

华为OD机试题 - N 进制减法(JavaScript)

最近更新的博客 2023新华为OD机试题 - 斗地主(JavaScript)2023新华为OD机试题 - 箱子之形摆放(JavaScript)2023新华为OD机试题 - 考古学家(JavaScript)2023新华为OD机试题 - 相同数字的积木游戏 1(JavaScript)2023新华为OD机试题 - 最多等和不相交连续子序列(JavaScri…...

MyBatis 之三(查询操作 占位符#{} 与 ${}、like查询、resultMap、association、collection)

文章目录1. 参数占位符 #{} 和 ${} 的区别2. ${} 的优点3. SQL 注入问题4. like 查询5. 返回字典映射:resultMap6. 一对一查询:association7. 一对多查询:collection回顾一下,在上一篇 MyBatis 之二(增、删、改操作&am…...

【云原生之Docker实战】使用Docker部署Web在线聊天室Rocket.Chat

【云原生之Docker实战】使用Docker部署Web在线聊天室Rocket.Chat 一、Rocket.Chat介绍二、检查本地系统环境1.检查系统版本2.检查docker版本3.检查docker状态4.检查docker compose版本三、下载Rocket.Chat镜像四、部署Rocket.Chat1.创建部署目录2.编辑docker-compose.yaml文件3…...

阿里一面:谈一下你对DDD的理解?2W字,帮你实现DDD自由

说在前面 在微服务的应用开发中,DDD 用得越来越普及。 在40岁老架构师 尼恩的读者交流群(50)中,DDD是一个非常、非常高频的交流话题。 最近,有小伙伴面试阿里时,遇到一个面试题: 谈谈你对DDD的理解? 小伙…...

嵌入式Linux入门级板卡的神经网络框架ncnn移植与测试-米尔i.MX6UL开发板

本篇测评由电子发烧友的优秀测评者“ALSET”提供。 米尔 MYD-Y6ULX-V2 开发板,基于 NXP i.MX6UL/i.MX6UL L处理器,该开发板被米尔称之为经典王牌产品。本次测试目标是在此开发板上进行神经网络框架ncnn的移植与测试开发,测试ncnn在此开发板上…...

扬帆优配|杠杆资金重仓股曝光,3只科创板股获多路资金青睐

到2月16日,科创板融资余额环比前一日削减1104.16万元,其间,23股融资余额环比添加超千万元,融资净买入居前的有晶科动力、诺诚健华、爱博医疗等。 到2月16日,市场融资余额算计1.48万亿元,较前一交易日削减27…...

资讯汇总230217

230217 22:48 【美联储理事鲍曼:美国通胀仍旧太高】美联储理事鲍曼表示,美国通胀仍旧太高;美国当前的经济数据不一致,不同寻常的低失业率是一个好迹象;让通胀回到目标还有很长的路要走;需要继续加息&#x…...

前置知识- 初值问题、ode 系列函数的用法、刚性 (stiff) 方程简介、高阶微分方程的降阶

1.1.4 龙格一库塔法 将向前欧拉法写成式 (1-37) 的形式, 可以看出它实际上利用了 f ( x , u ) f(x, u) f(x,u) 在 x n...

# AutoSar一文概览

1.什么是AutoSar ​ AUTOSAR全称为“AUTomotive Open System ARchitecture”,译为“汽车开放系统体系结构”;AUTOSAR是由 全球各大汽车整车厂、汽车零部件供应商、汽车电子软件系统公司联合建立的一套标准协议、软件架构。 2.为什么汽车行业要定义一个…...

分享88个HTML旅游交通模板,总有一款适合您

88个HTML旅游交通模板下载链接:https://pan.baidu.com/s/1pziNhgpC53h3KZy_a-aAFQ?pwdf99e 提取码:f99e Python采集代码下载链接:采集代码.zip - 蓝奏云 HTML5旅行公司旅行社网站模板 HTML5旅行公司旅行社网站模板是一款提供旅行服务的公司…...

C#中GDI+的矩形功能扩展

文章目录一、中心定位绘制图形1、矩形及椭圆中心定位2、圆的中心定位矩形二、圆角矩形三、收缩功能四、移动复制功能原文出处: https://haigear.blog.csdn.net/article/details/129060020GDI发展到GDI绘制函数中的参数往往都有矩形这个参数(除绘制直线和…...

数字经济活动题

讨论活动1-1:数字化 经济数字化(数据数字化,高速通信,大容量存储)将如何影响您所居住的国家?在网上搜索新闻文章(两三篇就够了),并讨论数字化如何影响经济、公共部…...

html 的相对路径和绝对路径

整篇文章是以 src 标签进行演示。 文章目录 一、相对路径 1、同级目录查找 2、上一级目录查找 3、下一级目录查找 二、绝对路径 一、相对路径 👵相对路径:从当前目录开始查找。 1、同级目录查找 写法: 1.1.直接写文件名字;…...

selenium进行QQ空间登录

一、selenium简要说明 selenium是基于浏览器自动化的一个模块,它能便捷的获取网站中动态加载的数据,和实现模拟登录、爬虫等操作 二、实现流程 2.1 selenium前置操作 1. 安装selenium模块 pip3 install selenium 2. 下载浏览器内核程序 注意&#xff1…...

SpringCloud(二)负载均衡服务调用Ribbon、服务接口调用OpenFeign案例详解

五、负载均衡服务调用Ribbon 技术版本Spring Cloud版本Hoxton.SR1Spring Boot版本2.2.2RELEASECloud Alibaba版本2.1.0.RELEASE Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 简单的说,Ribbon是Netflix发布的开源项目,主…...

大数据第一轮复习笔记(2)

Spark ./spark-submit --class com.kgc.myspark01.WordCount --master yarn --deploy-mode cluster /opt/myspark01-1.0-SNAPSHOT.jar 1.Client向YARN的ResourceManager申请启动Application Master。Client中创建SparkContext同时初始化中将创建DAGScheduler和TASKScheduler…...

3|射频识别技术|期末考试知识点|第3讲_RFID射频前端|重点题目

...

LeetCode 2108. 找出数组中的第一个回文字符串

给你一个字符串数组 words ,找出并返回数组中的 第一个回文字符串 。如果不存在满足要求的字符串,返回一个 空字符串 “” 。 回文字符串 的定义为:如果一个字符串正着读和反着读一样,那么该字符串就是一个 回文字符串 。 示例 …...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

OpenLayers 分屏对比(地图联动)

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、👨‍🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨‍&#x1f…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...