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

《JVM由浅入深学习【七】 2024-01-11》JVM由简入深学习提升分享

亲爱的读者们,欢迎来到本篇博客,这是JVM第七次分享,下面是七个JVM常用常面的分享,请笑纳

目录

    • 1. 几个与JVM 内存相关的核心参数
    • 2.如何计算一个对象的大小
    • 3.堆为什么要分为新生代和老年代
    • 4.JVM堆的年轻代为什么要有两个 Survivor 区?
    • 5.Eden 区与 Survivor 区的空间大小比值为什么默认是 8:1:1?

1. 几个与JVM 内存相关的核心参数

  • -Xms Java 堆内存的大小;
  • -Xmx Java 堆内存的最大大小;
  • -Xmn Java 堆内存中的新生代大小,扣除新生代剩下的就是老年代的内存大小
  • -XX:MetaspaceSize 元空间大小
  • -XX:MaxMetaspaceSize 元空间最大大小;
  • -Xss 每个线程的栈内存大小;
  • -XX:SurvivorRatio=8 设置 eden 区 和survivor 区大小的比例,默认是 8:1:1;
  • -XX:MaxTenuringThreshold=5 年龄阈值;
  • -XX:+UseConcMarkSweepGC 指定 CMS 垃圾收集器
  • -XX:+UseG1GC指定使用 G1 垃圾回收器
    在这里插入图片描述

2.如何计算一个对象的大小

引用一个apache提供的lucene工具包

<dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-core</artifactId><version>4.0.0</version>
</dependency>
@Data
public class People {private int id;private String username;private BigDecimal money;private byte[] bytes = new byte[1024 * 1024]; // 这里1024*1024byte等于1mpublic People() {}public static void main(String[] args) {People people = new People();long size = RamUsageEstimator.sizeOf(people);String humanedSize = RamUsageEstimator.humanSizeOf(people);System.out.println("size:" + size);System.out.println("humanedSize:" + humanedSize);}
}
size:1048624
humanedSize:1 MB

3.堆为什么要分为新生代和老年代

  • 因为年轻代和老年代不同的特点,
  • 年轻代的对象,它的特点是创建之后很快就会被回收,所以需要用一种垃圾回收算法
  • 老年代的对象,它的特点是需要长期存活,所以需要另外一种垃圾回收算法,
  • 所以需要分成两个区域来放不同的对象
  1. 绝大多数对象都是朝生夕灭的
    如果一个区域中大多数对象都是朝生夕灭,那么把它们集中放在一起,每次回收时只关注如何保留少量存活对象,而不是去标记那些大量将要被回收的对象,就能以较低的代价回收到大量的空间;
  2. 熬过越多次垃圾收集的对象就越难以回收;
    如果是需要长期存活的对象,那把它们集中放在一块,虚拟机便可以使用较低的频率来回收这个区域,这就同时兼顾了垃圾收集的时间开销和内存的空间有效利用
  3. JVM 划分出新生代、老年代之后,垃圾收集器可以每次只回收其中某一个或者某些部分的区域,同时也有了“Minor GC”“Major GC”“Full GC”这样的回收类型的划分;
  • Minor GC/Young GC : 新生代收集
  • Major Gc/Old GC: 老年代收集
  • Full GC: 整堆收集,收集整个 Java 堆和元空间/方法区的垃圾收集
  • Mixed GC: 混合收集,收集整个新生代以及部分老年代的垃圾收集,目前只有 G1 收集器会有这种行为;
    4、针对不同的区域对象存亡特征采用不同的垃圾收集算法
  • 标记-复制算法
  • 标记-清除算法
  • 标记-整理算法

4.JVM堆的年轻代为什么要有两个 Survivor 区?

  1. 如果没有 Survivor 区会怎么样?
    此时每触发一次 Minor GC,就会把 Eden 区的对象复制到老年代,这样当老年代满了之后会触发 Major Gc/Full GC(通常伴随着 MinorGC),比较耗时,所以必须有 Survivor 区
  2. 如果只有1个 Survivor 区会怎么样?
    刚刚创建的对象在 Eden 中,一旦 Eden 满了,触发一次 Minor GC,Eden 中存活的对象就会被移到s区,下次eden满了时,进行MinorGC,Eden区和s区就马上到老年代,这样相对也会更快的触发fullGC影响性能。

5.Eden 区与 Survivor 区的空间大小比值为什么默认是 8:1:1?

  • 一个 eden 区 ,新生代对象出生的地方
  • 两个 survivor 区,一个用来保存上次新生代 GC 存活下来的对象,还有一个空着,在新生代GC 时把 eden+survivor 中存活对象复制到这个空的 survivor 中
  • 统计和经验表明,90%的对象朝生夕死存活时间极短,每次 gc 会有 90%对象被回收,剩下的10%要预留一个 survivor空间去保存。

如果有任何疑问或建议,欢迎在评论区留言,我们将尽力解答。
感谢您的耐心阅读

相关文章:

《JVM由浅入深学习【七】 2024-01-11》JVM由简入深学习提升分享

亲爱的读者们&#xff0c;欢迎来到本篇博客&#xff0c;这是JVM第七次分享&#xff0c;下面是七个JVM常用常面的分享&#xff0c;请笑纳 目录 1. 几个与JVM 内存相关的核心参数2.如何计算一个对象的大小3.堆为什么要分为新生代和老年代4.JVM堆的年轻代为什么要有两个 Survivor…...

Golang leetcode142 环形链表 暴力map 快慢指针法

文章目录 环形链表 leetcode142暴力遍历 map哈希记录快慢指针法 环形链表 leetcode142 该题目要求找到入环的第一个节点 我们可以通过map进行记录&#xff0c;没到新的节点查询是否经过原有节点 入环节点&#xff0c;上两个节点的next相同 若有入环节点&#xff0c;则一定能检…...

基于java,springboot的论旅游管理系统设计与实现

环境以及简介 基于java,springboot的论旅游管理系统设计与实现&#xff0c;Java项目&#xff0c;SpringBoot项目&#xff0c;含开发文档&#xff0c;源码&#xff0c;数据库以及ppt 源码下载 环境配置&#xff1a; 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服…...

掌握视频节奏,玩转剪辑艺术!,轻松调整视频播放速度与秒数的技巧大揭秘

你是否经常觉得视频播放得太快或太慢&#xff0c;无法满足你的观看需求&#xff1f;或者想要控制视频的长度&#xff0c;却不知道该如何下手&#xff1f;今天&#xff0c;我们将为你揭秘几种简单又实用的方法&#xff0c;让你轻松调整视频的播放速度和秒数&#xff01; 首先&a…...

51单片机介绍

1 单片机简介 单片机&#xff0c;英文Micro Controller Unit&#xff0c;简称MCU 内部集成了CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能 单片机的任务是信息采集&#xff08;依靠传感器&#xff09;、处理&#xff08;依靠CPU&#xff09;和硬件设…...

k8s存储卷之动态

动态pv需要两个组件 1、卷插件&#xff0c;k8s本身支持的动态pv创建不包含NFS&#xff0c;需要声明和安装一个外部插件 Provisioner 存储分配器&#xff0c;动态创建pv&#xff0c;然后根据pvc的请求自动绑定和使用 2、StorageClass&#xff0c;用来定义pv的属性&#xff0c…...

base64 图片进行编码、解码;api调用

1、base64 图片进行编码、解码 编码 import base64# 假设您有一个图像文件&#xff0c;例如 image.jpg with open(r"C:\Users\l****1686722996428308480-1 (1).jpg", rb) as image_file:# 读取图像文件的二进制数据image_data image_file.read()# 将二进制数据编码…...

鸿蒙OS应用开发之百分比显示组件

前面学习了动态加载的组件,在本文里将要学习百分比显示组件,这个组件可以把数据按百分比的情况进行图形显示出来。百分比图形显示还是很有用的,比如一个班里学生的成绩占比,还有软件项目开发进度的情况,还有软件下载进度等等。 在鸿蒙系统里定义这个组件接口如下: DataP…...

网络多线程开发小项目--QQ登陆聊天功能(私聊群发)

9.1.4、QQ登陆聊天功能&#xff08;私聊群发&#xff09; 9.1.4.1、私聊功能 1、需求说明 2、思路分析 3、代码实现 QQClient&#xff1a; 1&#xff09;cn.com.agree.qqclient.QQView.QQView case "3":log.debug("请输入想给谁发消息(在线用户):");St…...

企业版多域名SSL证书

多域名SSL证书&#xff0c;是一种数字证书&#xff0c;可以用一张SSL证书保护多个独立的域名。这种证书类型适用于拥有多个不同域名的个人或者企事业单位&#xff0c;可以节省给每个域名购买和管理SSL证书的时间和成本。企业版多域名SSL证书只支持企事业单位申请&#xff0c;今…...

理解Herbrand Equivalence

笔者最近在看GVN的一系列论文&#xff0c;总会看到一个概念叫Herbran Equivalence&#xff0c;依靠这种定义&#xff0c;能够判断一个GVN算法是否是complete的&#xff0c;也即检测一个算法是否是precise的&#xff0c;只有找到所有Herbrand Equivalence关系的算法才能称得上是…...

【SimPy系列博客之官方example学习与解读】—— Example 3: Car Wash

Hello&#xff0c;CSDN的各位小伙伴们&#xff0c;又见面啦&#xff01;今天我们要学习的例程是&#xff1a;Car Wash&#xff01;我们开始吧&#xff01; 例程背景 这个例程相对于example 2来说会简单一些&#xff0c;有一个洗车厂&#xff0c;里面有若干台洗车机器&#xf…...

前端随机验证码安全验证sdk

前端随机验证码安全验证sdk 前言介绍一、效果展示二、使用步骤1.引入库2.参数说明3.方法与事件说明4.如何通过API获取当前用户的验证状态 ​ 前端必备工具推荐网站(免费图床、API和ChatAI等实用工具): http://luckycola.com.cn/ 前言 验证码&#xff1a;是一种校验区分用户是…...

语境化语言表示模型

一.语境化语言表示模型介绍 语境化语言表示模型&#xff08;Contextualized Language Representation Models&#xff09;是一类在自然语言处理领域中取得显著成功的模型&#xff0c;其主要特点是能够根据上下文动态地学习词汇和短语的表示。这些模型利用了上下文信息&#xf…...

PDO【配置】

PDOr: 6040 控制字 6060 模式 6083 加速度 6084 减速度 =====================【定位1】:// 补间7 607A 定位位置 6081 定位速度 =====================【速度3】: 60FF 目标速度 =====================【力矩4…...

CMake入门教程【高级篇】管理MSVC编译器警告

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 1.什么是MSVC?2.常用的屏蔽警告3.MSVC所有警告4.target_compile_options用法5.如何在CMake中消除MSVC的警告?6.屏蔽警告编写技巧...

【JaveWeb教程】(8)Web前端基础:Vue组件库Element之Table表格组件和Pagination分页组件 详细示例介绍

目录 1 Table表格组件1.1 组件演示1.2 组件属性详解 2 Pagination分页2.1 组件演示2.2 组件属性详解2.3 组件事件详解 接下来我们来学习一下ElementUI的常用组件&#xff0c;对于组件的学习比较简单&#xff0c;我们只需要参考官方提供的代码&#xff0c;然后复制粘贴即可。本节…...

llama_index 创始人为我们展示召回提升策略(提升15%)

用句子向量替换为句子向量 句子检索&#xff0c;将句子转化为向量。在检索的过程中&#xff0c;假如句子命中&#xff0c;则将句子周围的内容也当做检索内容。 对比句子检索和之前的按块去做切分的检索。可以看到&#xff0c;内容的相关性提升了8%&#xff0c; 构建数据的时候…...

RAG 详解

原文&#xff1a;GitHub - Tongji-KGLLM/RAG-Survey 目录 RAG调查 什么是RAG&#xff1f;RAG的范式 幼稚的 RAG高级 RAG模块化 RAG如何进行增强&#xff1f;RAG 还是微调&#xff1f;如何评估 RAG&#xff1f;前景 严峻的挑战多式联运扩展RAG的生态系统RAG论文清单 增强阶段 …...

【llm 部署运行videochat--完整教程】

# 申请llama权重 https://ai.meta.com/resources/models-and-libraries/llama-downloads/ -> 勾选三个模型 -> 等待接收右键信息 # 下载llama代码库 git clone https://github.com/facebookresearch/llama.git cd llama bash download.py -> email -> url …...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

Python学习(8) ----- Python的类与对象

Python 中的类&#xff08;Class&#xff09;与对象&#xff08;Object&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心。我们可以通过“类是模板&#xff0c;对象是实例”来理解它们的关系。 &#x1f9f1; 一句话理解&#xff1a; 类就像“图纸”&#xff0c;对…...

Android屏幕刷新率与FPS(Frames Per Second) 120hz

Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数&#xff0c;单位是赫兹&#xff08;Hz&#xff09;。 60Hz 屏幕&#xff1a;每秒刷新 60 次&#xff0c;每次刷新间隔约 16.67ms 90Hz 屏幕&#xff1a;每秒刷新 90 次&#xff0c;…...

深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀”

深入浅出JavaScript中的ArrayBuffer&#xff1a;二进制数据的“瑞士军刀” 在JavaScript中&#xff0c;我们经常需要处理文本、数组、对象等数据类型。但当我们需要处理文件上传、图像处理、网络通信等场景时&#xff0c;单纯依赖字符串或数组就显得力不从心了。这时&#xff…...

C++ Saucer 编写Windows桌面应用

文章目录 一、背景二、Saucer 简介核心特性典型应用场景 三、生成自己的项目四、以Win32项目方式构建Win32项目禁用最大化按钮 五、总结 一、背景 使用Saucer框架&#xff0c;开发Windows桌面应用&#xff0c;把一个html页面作为GUI设计放到Saucer里&#xff0c;隐藏掉运行时弹…...

DL00871-基于深度学习YOLOv11的盲人障碍物目标检测含完整数据集

基于深度学习YOLOv11的盲人障碍物目标检测&#xff1a;开启盲人出行新纪元 在全球范围内&#xff0c;盲人及视觉障碍者的出行问题一直是社会关注的重点。尽管技术不断进步&#xff0c;许多城市的无障碍设施依然未能满足盲人出行的实际需求。尤其是在复杂的城市环境中&#xff…...

如何使用CodeRider插件在IDEA中生成代码

一、环境搭建与插件安装 1.1 环境准备 名称要求说明操作系统Windows 11JetBrains IDEIntelliJ IDEA 2025.1.1.1 (Community Edition)硬件配置推荐16GB内存50GB磁盘空间 1.2 插件安装流程 步骤1&#xff1a;市场安装 打开IDEA&#xff0c;进入File → Settings → Plugins搜…...