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

JVM虚拟机概述(2)

3.JVM 运行时数据区

 

 3.1.1 程序计数器(Program Counter Register)

        是一块很小的内存空间,用来记录每个线程运行的指令位置,是线程私有的,每个线程都拥有一个程序计数器,生命周期与线程一致,是运行时数据区中唯一一个不会出现内存溢出的空间。运行速度最快。

3.1.2Java 虚拟机栈(Java Virtual Machine Stacks)

基本作用特征:

栈是运行单位,管理方法的调用运行,是用来运行java方法的区域。可能会出现栈溢出,是线程私有的。

运行原理:先进后出的结构,最顶部的称为当前栈帧。

栈帧结构:

一个栈帧包含:局部变量表(存储在方法中声明的变量),操作数栈(实际计算运行)

动态链接 void A(){  B();//B方法的地址  },方法返回地址。

3.1.3 本地方法栈(Native Method Stack)

  用来运行本地方法的区域,是线程私有,空间大小可以调整,可能会出现栈溢出。

3.1.4Java 堆(Java Heap)

       是Java虚拟机中内存最大的一块,是被所有线程共享的,在虚拟机启动时创建,java堆唯一的目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。

3.1.5 方法区(Methed Area)

用于存储已经被虚拟机加载的类信息,常量,静态变量,即时编译后的代码等数据。

方法区是很重要的系统资源,是硬盘和cpu之间的桥梁。

4.堆

4.1基本作用特征:

是存储空间,用来存储对象,是内存空间最大的一块儿区域,在jvm启动时就被创建,大小可以调整(jvm调优),本区域是存在垃圾回收的.是线程共享的区域。

4.2堆空间的分区:年轻代(新生区/新生代),伊甸园区(对象刚刚创建存储在此区域)

幸存者1区,幸存者2区,老年代(老年区)

 

4.3为什么要分区?

        可以根据对象的存活的时间放在不同的区域,可以区别对待。对不同的区域采用不同的垃圾回收算法,频繁回收年轻代,较少回收老年代。

4.4创建对象,在堆内存中分布

1.新创建的对象,都存储在伊甸园区。

2.当垃圾回收时。将伊甸园中垃圾对象直接销毁,将存活的对象,移动到幸存者1区。

3.之后创建的新对象还是存储在伊甸园区,再次垃圾回收到来时,将伊甸园中的存活对象移动到幸存者2区。同样将幸存者1区的存活对象移动到幸存者2区,每次保证一个幸存者区为空的,相互转换。

4.每次垃圾回收时,都会记录此对象经历的垃圾回收次数,当一个对象经历过15次回收,仍然存活,就会被移动到老年代。垃圾回收次数,在对象头中有一个4bit的空间记录,最大值只能是15。

5.老年区回收次数较少,当老年区内存空间不够用时,才会去回收老年代。

6.若老年区执行Major GC之后发现依然无法进行对象保存,就会产出OOM异常。

4.5堆空间的配置比例

默认的新生代与老年代的比例: 1:2 可以通过 -XX:NewRatio=2 进行设置

如果项目中生命周期长的对象较多,就可以把老年代设置更大.

在新生代中,伊甸园和两个幸存者区比例: 8:1:1

可以通过-XX:SurvivorRatio=8 进行设置

对象垃圾回收的年龄 -XX:MaxTenuringThreshold=<N>

4.6分代收集思想 Minor GC、Major GC、Full GC

JVM 在进行 GC 时,并非每次都新生区和老年区一起回收的,大部分时候回收的都是指新生区。针对 HotSpot VM 的实现,它里面的 GC 按照回收区域又分为两大类型:一种是部分收集,一种是整堆收集

部分收集:不是完整收集整个 java 堆的垃圾收集.其中又分为:

新生区收集(Minor GC/Yong GC):只是新生区(Eden,S0,S1)的垃圾收集。

老年区收集(Major GC / Old GC):只是老年区的垃圾收集。

整堆收集(Full GC):收集整个 java 堆和方法区的垃圾收集。

整堆收集出现的情况:

(1)System.gc();时

(2)老年区空间不足

(3)方法区空间不足

开发期间尽量避免整堆收集.

堆空间的参数设置

官方文档:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

字符串常量池

       在jdk7之后,将字符串常量池的位置从方法区转移到了堆空间中,因为方法区的回收在整堆收集时发生,回收频率低,堆空间回收频率高。

相关文章:

JVM虚拟机概述(2)

3.JVM 运行时数据区 3.1.1 程序计数器&#xff08;Program Counter Register&#xff09; 是一块很小的内存空间,用来记录每个线程运行的指令位置&#xff0c;是线程私有的,每个线程都拥有一个程序计数器&#xff0c;生命周期与线程一致&#xff0c;是运行时数据区中唯一一个不…...

Intel CSME 简述

SME 算是 Intel X86 PC 上最神秘的部分了,本文根据 us-19-Hasarfaty-Behind-The-Scenes-Of-Intel-Security-And-Manageability-Engine 一文写成。讲述内容无法证伪,各位随便听听即可,了解这些能够帮助BIOS 工程师更好的理解一些操作的实现。文章基于 Intel 第八代第九代CPU(…...

复位理论基础

先收集资料&#xff0c;了解当前常用的基础理论和实现方式 复位 初始化微控制器内部电路 将所有寄存器恢复成默认值确认MCU的工作模式禁止全局中断关闭外设将IO设置为高阻输入状态等待时钟趋于稳定从固定地址取得复位向量并开始执行 造成复位的原因 有多种引起复位的因素&…...

Python基础知识——列表

列表 列表是可以存放任何数据&#xff0c;包括整型&#xff0c;浮点型&#xff0c;字符串&#xff0c;布尔型等等&#xff0c;是常用的数据类型之一。 1.列表的创建 列表也是一个可迭代对象 1. 普通形式l [1,2,3,4,5] ---整型列表l ["a","b","c&…...

如何使用工时表管理项目和非项目的资源?

对新机会做出反应的能力是企业竞争优势的关键。项目不断涌现&#xff0c;企业需要了解具体的可用性以及是否有资源来接受新事物。更进一步来说&#xff0c;企业需要知道员工将时间花在哪里。 使用 8Manage工时表解决方案&#xff0c;你将始终拥有做出正确业务决策所需的全面知…...

项目经理如何做好质量保证与标准维持?非技术项目经理如何做好质量管控?

项目经理如何做好质量保证与标准维持&#xff1f;非技术项目经理如何做好质量管控&#xff1f;01.质量保障需要重视哪些执行层面的细节02.非技术出身项目经理如何做好质量保障工作03.质量管理除了PDCA&#xff0c;还有哪些推荐的方法04.质量保证与标准维持&#xff0c;作为常态…...

[文件操作] File 类的用法和 InputStream, OutputStream 的用法

能吃是不是件幸福的事呢 文章目录前言1. 文件的相关定义2. 文件类型3. Java对文件系统的操作3.1 对文件的基础操作3.2 读文件3.3 写文件前言 从这章开始,我们就开始学文件操作相关的知识了~ 1. 文件的相关定义 1.文件的定义可以从狭义和广义两个方面解释. 狭义: 指硬盘上的文…...

索莫菲模型的一些理解 Smomerfeld Model

如何解释传统热容算出来的数值与量子模型下的区别&#xff1f; 因为只有费米能附近的电子才能够进行移动&#xff0c;这个是问题的差别所在 我们下面就来介绍如何求费米能&#xff08;费米能的计算&#xff09; 既然费米能附近的电子很重要&#xff0c;那么附近的电子有多少很…...

SAP ERP系统MM模块常用增强之四:采购申请输入字段的校验检查

在SAP/ERP项目的实施中采购管理模块&#xff08;MM&#xff09;的创建和修改采购申请一般都会有输入字段校验检查的需求&#xff0c;来防止业务人员录入错误或少录入数据&#xff0c;这方面需求部分是可以通过配置实现&#xff0c;比如一些字段是否必输&#xff0c;是否显示等&…...

STM32C0介绍(1)----概述

概述 STM32C0系列微控制器是意法半导体公司推出的一款低功耗、高性能的微控制器产品。它们被设计用于需要小型、低功耗和高度可集成的应用程序&#xff0c;如传感器、消费品、电池供电设备、家庭自动化和安全等应用。该系列的微控制器采用ARM Cortex-M0内核&#xff0c;具有丰…...

windows无盘启动技术开发之传统BIOS(Legacy BIOS)引导程序开发之一

by fanxiushu 2023-03-01 转载或引用请注明原始作者。这个话题可能有点老&#xff0c;UEFI BIOS 已经大量存在&#xff0c;而Legacy BIOS最终会被取代。但是也是作为无盘启动技术里不可或缺的&#xff0c;毕竟还有许多老型号的电脑存在&#xff0c;而且为了兼容性&#xff0c;有…...

mysql实现if语句判断功能的六种使用形式

文章目录 前言一、ifnull函数二、nullif函数三、if函数四、if语句(多用于存储过程)五、if-else语句(多用于存储过程)六、if-elseif-else语句(多用于存储过程)总结前言 在Mysql数据库中实现判断功能有很多方式,具体又分为函数和if语句形式,函数的好处是可以作为sql的一…...

在Vue3这样子写页面更快更高效

前言 在开发管理后台过程中&#xff0c;一定会遇到不少了增删改查页面&#xff0c;而这些页面的逻辑大多都是相同的&#xff0c;如获取列表数据&#xff0c;分页&#xff0c;筛选功能这些基本功能。而不同的是呈现出来的数据项。还有一些操作按钮。 对于刚开始只有 1&#xff…...

做软件测试,如何才能实现月入20K?

听我的&#xff0c;测试想要月入20k。 首先你要去大厂&#xff0c;不在大厂起码也得在一线城市&#xff0c;北上广深。 二线城市的话成都、杭州最好。 不然的话想都不要想。 像我之前整理过成都的公司&#xff0c;除了字节跳动、蚂蚁金服、滴滴、美团、京东、平安、字节跳动…...

mysql last lesson

1:创建用户 create user zhang identified by 12345678;2&#xff1a;给用户授权&#xff0c;撤销授权&#xff0c; grant.......to revoke ....... 3:将数据库中的数据导出 C:\Windows\system32>mysqldump bjpowernode>C:\bjpowernode.sql -uroot -p12345678 4&#…...

一、Redis入门概述(是什么,能干嘛,去哪下,怎么玩)

一. redis是什么&#xff1f; Redis:REmote Dictionary Server(远程字典服务器)官方解释&#xff1a; Remote Dictionary Server(远程字典服务)是完全开源的&#xff0c;使用ANSIC语言编写遵守BSD协议&#xff0c;是一个高性能的Key-Value数据库提供了丰富的数据结构&#xff…...

(六十二)当我们在SQL里进行分组的时候,如何才能使用索引?

今天我们接着上次的内容来谈谈在SQL语句里假设你要是用到了group by分组语句的话是否可以用上索引&#xff0c;因为大家都知道&#xff0c;有时候我们会想要做一个group by把数据分组接着用count sum之类的聚合函数做一个聚合统计。 那假设你要是走一个类似select count(*) fr…...

python字符串练习

python字符串练习 1.去掉字符串中所有的空格 s This is a demo print(s.replace( , )) 2.获取字符串中数字的个数 data input("请输入一些字符串&#xff1a;") a 0 for i in data:if i.isdigit():a a 1 print("数字个数:", a)3.将字母全部转换为…...

Java-封装、继承、多态

封装 访问控制权限又成为“封装”&#xff0c;是面向对象三大特征中的一种。核心是&#xff0c;只对需要的类可见。 继承 继承是所有OOP&#xff08;Object Oriented Programming&#xff09;语言和Java语言都不可或缺的一部分。 只要创建一个类&#xff0c;就隐式继承自Obje…...

问题三十二:离散二维傅立叶变换(Discrete Fourier Transformation)

为了将灰度图像表示为频谱图&#xff0c;我们需要进行以下步骤&#xff1a; 加载图像并将其转换为灰度图像。对图像进行二维离散傅里叶变换。将变换结果表示为幅度谱和相位谱。可以对幅度谱和相位谱进行可视化&#xff0c;以查看频率分布。对幅度谱和相位谱进行逆变换&#xf…...

DevEco Studio预览器(Previewer)的3个隐藏技巧:从实时预览到多设备联调

DevEco Studio预览器的3个隐藏技巧&#xff1a;从实时预览到多设备联调 在鸿蒙应用开发中&#xff0c;DevEco Studio的Previewer功能早已超越了简单的UI查看工具。对于已经掌握基础操作的中级开发者而言&#xff0c;如何将这个看似简单的预览窗口转变为高效调试利器&#xff0…...

嵌入式老鸟带你搞懂eMMC上电、下电时序:从Pre-Idle到HS400模式切换的完整流程解析

嵌入式系统eMMC深度解析&#xff1a;从硬件时序到Linux驱动的全链路设计 在嵌入式系统开发中&#xff0c;eMMC存储器的稳定性和性能优化往往是决定产品可靠性的关键因素之一。当开发板启动失败或存储性能不达标时&#xff0c;很多工程师会首先怀疑软件问题&#xff0c;却忽略了…...

从电压模到COT:DC-DC降压转换器控制模式演进与选型指南

1. DC-DC降压转换器控制模式概述 第一次接触电源设计时&#xff0c;我被各种控制模式搞得晕头转向。电压模、电流模、迟滞控制、COT...这些专业名词就像天书一样。后来在实际项目中摸爬滚打多年&#xff0c;才发现理解这些控制模式的关键在于抓住它们的"性格特点"——…...

基于加速度计的体感音乐控制器:用MakeCode与Circuit Playground Express实现交互式乐器

1. 项目概述&#xff1a;当硬件编程遇见音乐创作 如果你对嵌入式开发、物理计算或者音乐技术感兴趣&#xff0c;但又觉得从零开始门槛太高&#xff0c;那么这个项目可能就是为你量身定做的。今天我们来聊聊如何用一块巴掌大的开发板——Adafruit的Circuit Playground Express&a…...

AI营销软件提升企业客户获取与运营效率的创新解决方案

AI营销软件正在为企业带来前所未有的客户获取与运营效率提升。它利用多平台整合功能&#xff0c;实现信息的统一管理&#xff0c;极大地优化了客户获取流程。这种软件不仅可以进行智能内容创作&#xff0c;还能高效分发到各大渠道&#xff0c;进而提升品牌的市场影响力。同时&a…...

[技术解析]图卷积网络在半监督节点分类中的实战与优化

1. 图卷积网络入门&#xff1a;从传统CNN到GCN的思维跃迁 第一次接触图卷积网络(GCN)时&#xff0c;我习惯性地用传统CNN的思维去理解它&#xff0c;结果踩了不少坑。传统卷积在规整的网格数据上滑动滤波器的操作&#xff0c;在图数据中完全行不通——因为图的拓扑结构是不规则…...

从零上手RP2040:为树莓派Pico注入MicroPython灵魂

1. 为什么选择MicroPython&#xff1f; 对于刚接触树莓派Pico&#xff08;RP2040&#xff09;的新手来说&#xff0c;选择MicroPython作为开发语言是个明智的决定。这就像第一次学骑自行车时选择带辅助轮的车子——它降低了入门门槛&#xff0c;让你能快速感受到编程的乐趣。Mi…...

如何免费解锁雀魂全角色皮肤:终极完整配置指南

如何免费解锁雀魂全角色皮肤&#xff1a;终极完整配置指南 【免费下载链接】majsoul_mod_plus 雀魂解锁全角色、皮肤、装扮等&#xff0c;支持全部服务器。 项目地址: https://gitcode.com/gh_mirrors/ma/majsoul_mod_plus 还在为无法获得心仪的雀魂角色而烦恼吗&#x…...

法学博士论文降重+溯源双突破:NotebookLM文献脉络追踪功能(实测引用准确率98.6%,超人工校验)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM法学研究辅助的范式变革 传统法学研究长期依赖人工检索、逐条比对判例与法条、手工整理文献脉络&#xff0c;知识关联深度受限于研究者个体经验与时间成本。NotebookLM 的引入&#xff0c;标…...

Day 2|项目目录与多布局、路由与权限守卫:从结构到落地代码

1. 目标与产出 明确中后台项目目录分层与职责边界。落地多布局&#xff08;主布局/业务布局&#xff09;&#xff0c;沉淀可复用容器组件。设计路由与权限模型&#xff08;角色/权限点&#xff09;&#xff0c;实现路由守卫与菜单联动。产出可复用的 Pinia 权限状态、权限指令、…...