《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空间去保存。

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

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

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

相关文章

解密Spring Boot的快速启动引擎:揭秘背后的秘密

目录 1、前言 2、什么是Spring Boot 3、Spring Boot的快速启动引擎 3.1 自动配置 3.2 简化的依赖管理 3.3 内嵌式容器 3.4 自动化部署 4、Spring Boot的核心原理 4.1 Spring Boot的启动流程 4.2 Spring Boot的自动配置原理 4.3 Spring Boot的依赖管理原理 4.4 Spri…

ChatGPT新出Team号 年付费

之前一直传的团队版ChatGPT终于来了&#xff0c;这个对拼单的比较合算。每人每月25美元&#xff0c;只能按年支付。 团队版比普通版多的权益有&#xff1a; ◈更多的GPT-4消息上限&#xff0c;三小时100次。 ◈可以创建与团队内部共享的GPTs。 ◈用于工作空间管理的管理员控…

能赚钱的GPT Store正式上线!如何将自己的 GPT 放到商店中?

等了两个月&#xff0c;OpenAI 的 GPT Store 今日凌晨终于上线&#xff01;上线 GPT Store 的同时&#xff0c;OpenAI 同步了最新的 GPTs 数据&#xff1a;截止到1月11日&#xff0c;用户已创建300万的GPTs&#xff01; GPTs 开发者可以通过 GPTs 来获利。OpenAI 将在今年第一季…

单片机原理及应用——C51语言版(第2版,林立、张俊亮编著)课后习题及答案

第一章习题 1.1 单项选择题 &#xff08;1&#xff09; 单片机又称为单片微计算机&#xff0c;最初的英文缩写是____。 答案(D) A.MCPB.CPUC.DPJD.SCM &#xff08;2&#xff09; Intel公司的MCS-51系列单片机是______的单片机。 答案(C) A.1位B.4位C.8位D.16位 &#xf…

2023 年度总结—总结我今年的AI之路-多项目实战经验谈AI发展前景

各位好&#xff0c;我是难忘&#xff0c;对人工智能方向有所研究&#xff0c;今年一年除了开发了几个软件项目之外的时间&#xff0c;基本都用到了学习研究AI上&#xff0c;最近几个月也是产出了几款AI领域的爆火文章&#xff0c;也把自己学习AI的笔记写了一个专栏&#xff0c;…

Web端3D渲染引擎HOOPS SDK助力打造创新型3D测量软件

HOOPS SDK是全球领先的3D领域开发工具提供商Tech Soft 3D 打造的控件产品&#xff0c;HOOPS SDK包括4款3D软件开发工具&#xff0c;其中HOOPS Exchange是一款CAD数据转换工具&#xff0c;可读取和导入30多种CAD文件格式&#xff1b;HOOPS Communicator是一款专注于Web端工程图形…

Python语言基础

目录 任务驱动式学习 任务一&#xff1a;输出问候语 一、Python程序的两种编程模式 二、Python程序的执行方式——解释执行 三、基本输入输出函数 任务二&#xff1a;计算圆的周长和面积 一、语句块缩进 二、变量与对象 三、数据类型及转换 四、数字类型及运算 五、…

linux 网络基础配置

将Linux主机接入到网络&#xff0c;需要配置网络相关设置一般包括如下内容&#xff1a; 主机名 iP/netmask (ip地址&#xff0c;网关) 路由&#xff1a;默认网关 网络连接状态 DNS服务器 &#xff08;主DNS服务器 次DNS服务器 第三个DNS服务器&#xff09; 一、…

【解决】Unity Project 面板资源显示丢失的异常问题处理

开发平台&#xff1a;Unity 2021.3.7f1c1   一、问题描述 在开发过程中&#xff0c;遭遇 Project 面板资源显示丢失、不全的问题。但 Unity Console 并未发出错误提示。   二、解决方案&#xff1a;删除 Library 目录 前往 “工程目录/Library” 删除内部所有文件并重打开该…

操作系统导论-课后作业-ch5

关于man的使用 man 系统参考手册 man n name 在系统手册第n章查看name1. 代码&#xff1a; #include <stdio.h> #include <sys/types.h> #include <unistd.h> #include <sys/wait.h>int main() {int x 100;int rc fork();if (rc -1) {fprintf…

【EI会议征稿通知】第五届机电一体化技术与智能制造国际学术会议(ICMTIM 2024)

第五届机电一体化技术与智能制造国际学术会议&#xff08;ICMTIM 2024&#xff09; 2024 5th International Conference on Mechatronics Technology and Intelligent Manufacturing 第五届机电一体化技术与智能制造国际学术会议&#xff08;ICMTIM 2024&#xff09;将于2024…

解析 ODPS SQL 任务优化方法原理

一文解析 ODPS SQL 任务优化方法原理 本文重点尝试从ODPS SQL的逻辑执行计划和Logview中的执行计划出发,分析日常数据研发过程中各种优化方法背后的原理,覆盖了部分调优方法的分析,从知道怎么优化,到为什么这样优化,以及还能怎样优化。 一、背景 使用ODPS SQL进行离线数据…