JVM的简介及内部结构(二)

深入解析JVM内部结构及GC机制的实战应用 类加载子系统(Class Loader Subsystem)运行时数据区(Runtime Data Area)执行引擎(Execution Engine)本地方法接口(Native Interface) 阅读详情

前文回顾

在这里插入图片描述
A:hello_test.class由类装载子系统加载到方法区(元空间)
B:由字节码执行引擎到方法区(元空间)执行代码。程序计数器是用来记录程序执行的位置,所以字节码执行引擎每执行完一行代码,修改一下程序计数器。
C:根据代码中线程开辟线程空间。由于hello_test.class中只有main线程,所以这里只开辟了main线程空间。
D:而在线程中用到的变量需要存储在栈中,所以线程空间中需要栈。
E:当程序中有用到本地方法时,则线程空间也需要本地方法栈。
由上不难看出,栈、本地方法栈、程序计数器都为每个线程私有,也就是一个线程会为它单独分配这三块。
而堆、方法区(元空间)则为所有线程共用的。这也造成多线程不安全。

堆

堆:存放对象
在这里插入图片描述
A:当需要存放对象时,一般存放Eden元区。
B:当Eden元区放满,新对象还再向Eden元区存放时,字节码执行引擎就会在后台开启一个垃圾回收线程(minor gc)。可达性分析算法,通过gc root查询是否有引用。从gc root出发找到了引用则标记为非垃圾数据。
C:将Eden元区中标记的非垃圾对象复制到survivor 1区,并把这些非垃圾对象的分代年龄加一,最后把Eden元区清空。
D:当Eden元区再次放满后,启动minor gc,对Eden元区和survivor 1区中的对象进行可达性分析算法,标记出非垃圾对象,再将这些非垃圾对象复制到survivor 2区,并把这些非垃圾对象的分代年龄加一,最后把Eden元区和survivor 1区清空。
E:minor gc会对Eden元区和非空的survivor 区中对象进行可达性分析算法,最终将非垃圾对象复制到空的survivor 区,并将非垃圾对象的分代年龄加一,如此循环。
F:当有对象的分代年龄超过15,则将该对象移动到老年代。
G:当老年代放满,触发full gc。OOM(内存溢出)
JVM调优:尽量减少gc次数,执行时间。特别是减少full gc次数及执行时间
STW:gc触发STW(stop the Word)停止用户的所有线程,页面形成卡顿。
这里介绍两个java诊断工具
1.Arthas 是Alibaba开源的Java诊断工具
https://arthas.aliyun.com/doc/
2.jdk自带的jvisualvm
以jdk自带的jvisualvm的工具进行分析

LSM6DSOW陀螺仪轮询驱动:从I2C/SPI配置到数据读取全解析 惯性测量单元(IMU)是现代嵌入式系统中实现姿态感知与运动跟踪的核心传感器,其通过加速度计和陀螺仪测量线性加速度与角速度。在嵌入式开发中,轮询(Polling)作为一种基础且可靠的通信方式,通过主循环主动查询传感器状态,简化了初始调试与验证流程。对于I2C/SPI接口的数字传感器,掌握寄存器配置、数据就绪标志检查及原始数据转换是通用的驱动方法,能够快速验证传感器工作状态并理解数据流。LSM6DSOW作为一款高性能6轴IMU,支持可配置的量程与输出数据速率,适用于无人机飞控、手持云台等高动态场景。本文以LSM 阅读详情

相关推荐

Python xlwings报错解决:从‘NoneType‘到完美运行WPS表格的完整指南

本文深入解析了使用Python xlwings库自动化WPS表格时遇到的经典'NoneType'报错(AttributeError: 'NoneType' object has no attribute 'apps')的根源与解决方案。核心在于pywin32版本与WPS的兼容性问题,文章提供了从版本降级、依赖管理到构建健壮自动化环境的完整实战指南,帮助开发者彻底解决兼容性难题,实现稳定运行。

n4o5p6q7r的博客 303

JVM学习-JVM简介以及其内部结构

JVM是Java虚拟机的缩写,是Java程序的运行环境。更准确地说是Java程序的二进制字节码的运行环境,因为JVM的主要作用是将Java源码编译为字节码并执行。Java程序之所以能够跨平台运行就是因为JVM的存在,JVM编译后的字节码在任何支持JVM的平台都可以运行且无需再次编译;并且JVM有自己的垃圾回收机制,自动管理内存,减轻了程序员内存管理的负担。通过学习JVM,我们就可以了解一个Java程序在底层的执行过程,进而优化我们的代码。

qq_65568592的博客 1452

使用基于物质点法(MPM)的Anura3D模拟沙柱坍塌

本博客使用开源软件Anura3D软件模拟了一个沙柱坍塌的过程,这个软件是基于基于物质点法(MPM)设计的

weixin_59902634的博客 4043

JVM学习之路(二)——JVM的内部结构

二、JVM的内部结构 在第一部分中,介绍了一个java程序执行的流程,但是最后一部分就只说了初始化jvm后,利用JNI接口去找到硬盘上的.class字节码文件并加载进内存,然后再找到main()方法,执行即可。 有没有发现这部分说的很笼统,具体细节依然没有说清楚。那具体执行细节是怎样的呢? 具体实现细节要依赖JVM的内部结构!!那JVM的内部结构是怎么样的呢? 就这张图,简单解释一下:JVM中的...

京北游戏官方 3万+

【上海大学计算机组成原理实验报告】七、程序转移机制

学习实现程序转移的硬件机制//掌握堆栈寄存器的使用//手动方式实现子程序调用转移过程//手动方式实现子程序返回转移过程//编程实现`OUT`寄存器交替显示`11`和`55`//若要求`11`和`55`各显示`50`次后停机,应该如何修改程序?//根据实验指导书的相关内容,实验箱系统的程序转移硬件机制在于,当`LDPC`有效时,如果此时`DUBS`上的值就是转移的目标地址,则此目标地址被打入`PC`,从而实现程序的转移;若`LDPC`为`0`是附带条件的,就形成“条件转移”。

HackerKevon的博客 2472

Visual Studio 2013 + Intel(R) Visual Fortran 安装教程

安装了好几遍,ivf都不能加载到vs中,中途放弃了vs,又改用codeblocks编译器,依然在写fortran的时候出现了各种问题,于是又放弃了codeblocks改回vs,总之是折腾了好久,终于装明白了ivf并且将fortran模板成功加载到vs中。 PS:一定要安装Intel Visual Fortran.Composer XE.2013-SP1,不要用Intel Visual Fortr...

Coco_wjy的博客 12万+

JVM内部结构解析

Java虚拟机(JVM)是Java程序运行的基础环境,它为Java程序提供了一个与平台无关的执行环境。了解JVM的内部结构对于Java开发者来说至关重要,因为它可以帮助开发者优化程序性能,理解垃圾回收机制,以及诊断和解决运行时问题。本文将深入解析JVM的内部结构,包括其主要组成部分和它们的作用。

qq_56438516的博客 1381

多尺度Transformer+特征融合新范式,算力减半精度猛增

在大模型时代,多尺度特征融合与Transformer架构的结合正成为研究热点。多尺度特征融合能够捕捉数据在不同尺度上的关键信息,而Transformer架构凭借其强大的并行处理能力和对长距离依赖的建模能力,为复杂数据处理提供了新的思路。这种结合在处理多模态数据时展现出巨大潜力。

Tulingxueshu的博客 1057

【JVM】JVM简介

JVM 是 Java Virtual Machine 的简称,意为 Java虚拟机。虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。常见的虚拟机:JVM、VMwave、Virtual Box。VMwave与VirtualBox是通过软件模拟物理CPU的指令集,物理系统中会有很多的寄存器;JVM则是通过软件模拟Java字节码的指令集,JVM中只是主要保留了PC寄存器,其他的寄存器都进行了裁剪。JVM 是一台被定制过的现实当中不存在的计算机与君共勉!

ZXT的博客 2552

SPI协议详解(图文并茂+超详细)

先说串口 因为之前写过一篇UART,通用串行异步通讯协议,UART的相关资料 因为UART没有时钟信号,无法控制何时发送数据,也无法保证双发按照完全相同的速度接收数据。因此,双方以不同的速度进行数据接收和发送,就会出现问题。 如果要解决这个问题,UART为每个字节添加额外的起始位和停止位,以帮助接收器在数据到达时进行同步; 双方还必须事先就传输速度达成共识(设置相同的波特率,例如每秒9600位)。 传输速率如果有微小差异不是问题,因为接收器会在每个字节的开头重新同步。相应的协议如下图所示; 如果您注意到

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 33万+

禾赛激光雷达AT128P/海康相机(1):ROS环境设备驱动

sudo cp *.so /opt/MVS/lib/64/ # 复制当前文件夹中所有.so文件 到 “/opt/MVS/lib/64/” 文件中。将相应的.so文件复制到 /opt/MVS/lib/64/。我解压的是x86_64的,解压之后,打开,再解压MVS。然后在上一层,也就是选择x86_64那一层打开终端。新建一个工作空间,或者打开自己的工作空间。)包放在src内,并解压,然后编译。MVS V2.1.2下载之后解压,// 驱动代码下载到src文件里面。// 特定文件夹中打开终端。

努力努力努力 882

JVM内部结构简介

JVM基本结构基本构成类加载系统JVM内存结构元数据空间PC寄存器堆内存JAVA栈内存局部变量表操作数据栈帧数据区直接内存GC执行引擎 基本构成 JVM主要构成如下如下图: 类加载系统 类加载主要负责类的加载,校验,准备,解析,初始化。 详细见:JVM类装载机制 JVM内存结构 元数据空间 JDK 7之前称为方法区或者永久区,主要存放的是类的元数据信息,如:类名,属性名,方法名,常量值等等。比如: public class Demo1 { int a ; public static voi

rongoof的博客 363

解决【x2openEuler环境检查未通过——CheckRepoCurlActor不通过】问题

摘要:x2openEuler使用默认repo源时出现环境检查失败问题,原因是默认源返回308永久重定向错误。解决方法包括:1)为CentOS主机配置华为yum源;2)在x2openEuler Web界面修改为自定义可用源。具体步骤包括备份原源、下载华为源、清除缓存,并通过curl测试确认新源可用性。最终成功配置openEuler-24.03-LTS-SP1版本的repo源后,环境检查顺利通过。

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 258

java虚拟机(JVM)的内部结构

Java虚拟机(JVM)是Java语言的运行环境,它是一个抽象的计算机,能够通过软件模拟来执行Java字节码。JVM为Java语言的跨平台特性提供了基础,因为Java程序只需编译一次,就可以在任何安装了JVM的平台上运行。执行Java字节码:将编译后的.class文件中的字节码在不同的平台上执行。内存管理:自动为对象分配内存,并在不再使用时进行垃圾回收。安全性保证:通过沙箱(Sandbox)机制限制程序对系统资源的访问,确保安全性。优化执行性能:通过即时编译(JIT)等技术优化程序的执行速度。

无远弗届 959

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

jvm指令手册_JVM的简介及内部结构

JVM介绍(java virtual machine)java程序的跨平台我们编写一个,通过javac命令生成字节码文件,再通过java命令由jvm生成机器码。跨平台特性:我们只需编写一份代码,可以在不同操作系统中执行。但是不同的操作系统它底层硬件与指令存在区别,那java如何做到一份代码在不同操作系统中运行的呢?原因:在oracle官网提供不同操作系统的JDK,不同JDK里面也就包含不同的J...

weixin_39854681的博客 84

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JVM的简介及内部结构(一)

JVM介绍 1.jvm(java virtual machine) java程序的跨平台 我们编写一个helloWorld.java,通过javac命令生成helloWorld.class字节码文件,再通过java命令由jvm生成机器码。 跨平台特性: 我们只需编写一份代码,可以在不同操作系统中执行。但是不同的操作系统它底层硬件与指令存在区别,那java如何做到一份代码在不同操作系统中运行的呢? 原因: 在oracle官网提供不同操作系统的JDK,不同JDK里面也就包含不同的JVM。在通过java命令根据

study_study_know的博客 644

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

JVM内部结构和JVM面试题目

JVM学习笔记 什么是JVM JVM:从软件层面屏蔽不同操作系统在底层硬件和指令上的区别。Java的跨平台的特性就是通过JVM实现的。 JVM的组成 JVM包含类装载子系统,运行时数据区(内存模型),字节码执行引擎三部分组成。 2.1运行时数据区的组成 运行时数据区包含堆,方法区(元空间),栈(线程)本地方法栈,程序计数器组成。 堆:用于存放对象。 方法区:直接内存,主要用于存储常量,静态变量,类信息(.class文件通过装载解析成类信息存储在方法区,通过字节码执行引擎执行)。 方法区中的静态变

Tsinmio的博客 327

【jvm】栈帧的内部结构

6.总的来说,JVM栈帧的内部结构是虚拟机进行方法调用和执行的基础,它通过局部变量表、操作数栈、动态链接、方法返回地址等部分,维系着方法执行过程中的各种数据信息。4.局部变量表中的变量只在当前方法调用中有效,方法执行结束后,随着方法栈帧的销毁,局部变量表也会随之销毁。5.在多线程环境下,每个线程都有自己的虚拟机栈,栈中存储的是各自的栈帧,它们之间互不影响。2.每个方法从调用到执行完成的过程,都对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。1.局部变量表是栈帧中非常重要的一部分,它主要用于。

王佑辉的博客 1037

JVM运行时数据区内部结构

Java内存空间

Bamboou的博客 602

41.JVM方法区的内部结构(方法区中存储的是什么)

目录1.方法区内部结构2.`non-final`的类变量与`final`的类变量初始化的时间 1.方法区内部结构 Java代码被编译成字节码文件之后,通过类加载器被加载到运行时数据区。其中,方法区主要存储的是类型的相关信息以及运行时常量池。对于字符串常量,根据JDK版本的不同,有的放到了方法区,有的没有。 方法区中存放的是类型信息、常量、静态变量、即时编译器编译后的代码缓存、域信息、方法信息等。随着JDK的发展,方法区中存放的内容也在发生变化。并不绝对。通常情况下放的是这些内容。 1.类型信息 2.域

simpleGq的专栏 5156

Java — JVM 实操剖析内部结构

Java — JVM 实操剖析内部结构 本篇文章主要以实操剖析 JVM 环节为主,辅助于理解 JVM 相关理论知识。注:本文代码部分所采用的 JDK 环境为 1.8。 一、JVM 相关 (一) JVM运行原理 .java源文件通过编译器编译产生 .class字节码文件,.class字节码文件通过JVM当中的字节码解释器,编译成特定机器上的 机器码。 每一种平台的解释器不同,但是实现的JVM时相同的。(JVM会根据不同的系统生成不同的机器码,每个操作系统都有一个不同的JVM)。 查看本机 JVM

pentiumCM的博客 417

《jvm总结一》之jvm内部结构解析

前言 为了更好的学习java语言,必须要了解的jvm。 JVM整体架构: 这里需要明白的是: jvm编译到底层的代码是字节码0和1组成,在不同的操作系统中运行,他的字节码都不一样,比如同一个字,在经过jvm编译之后,可能在windows上是0101,在linux上是1100因为在两个操作系统他们编写的语言都不太一样,这个操作通过jvm来实现,对不同的操作系统进行不同的编译,可想而之,jvm的重要...

weixin_43982794的博客 482

【jvm】堆的内部结构

2.在发生Minor GC(年轻代垃圾回收)时,存活的对象会从Eden区和当前的Survivor区(比如S0)复制到另一个Survivor区(比如S1),然后清空原来的区域。1.JVM堆的内部结构主要包括年轻代(Young Generation)和老年代(Old Generation),这种划分是基于对象的存活时间和使用特点来进行的。1.当年轻代中的对象存活时间较长,或者年轻代空间不足无法容纳新生成的对象时,这些对象会被转移到老年代中。2.Eden区是年轻代中最大的区域,用于存放大多数新生成的对象。

王佑辉的博客 754

JVM堆的内部结构是什么

它规定了所有JVM实现都必须有这么一个区域,用来存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。老年代的垃圾回收相对较少,但每次回收的时间较长,称为。在一次 Minor GC 之后,仍然存活的对象会从 Eden 区和当前的幸存者区复制到另一个幸存者区。堆内存的内部结构通常分为几个不同的区域,以便更高效地进行内存分配和垃圾回收。:将活动对象从一个区域复制到另一个区域,清理掉旧区域的所有对象。:标记活动对象,然后将它们整理到堆的一端,清理掉不活动的对象。

埃泽漫笔 504
上一篇: JVM的简介及内部结构(一)
下一篇: SpringBoot项目启动后及关闭前执行指定代码
0和1搭建网络世界
博客等级 码龄7年 19粉丝 31原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值