(一)JVM实战——jvm的组成部分详解

前言

本节内容是关于java虚拟机JVM组成部分的介绍,通过其组成架构图了解JVM的主要组成部分。

正文

ClassFile:字节码文件

- javac:javac前端编译器将源代码编译成符合jvm规范的.class文件,即字节码文件

- class文件的结构组成:魔术、Class文件版本、常量池、访问标志、类索引、父类索引、接口索引集合、字段表集合、方法表集合、属性表集合

- javap:解析字节码,将字节码文件解析为可读的机器码

类加载器子系统(Class Loader):负责将编译后的Java字节码加载到内存中,并在运行时创建对应的类和对象。类加载器根据类的名称、包名等信息来查找并加载类。

- 类的加载过程

①Loading(装载)阶段:将java类的字节码文件加载到机器内存中并在内存中构建出java类的模版对象(类数据结构),存储在方法区(1.8之前永久代,1.8之后元空间),实例对象在堆中

②Linking(链接)阶段

        -验证:格式检查、语义检查、字节码验证、符号引用验证。

        -准备:为类的静态变量分配内存,并将其初始化为默认值;同时final修饰的static静态变量会在此直接赋值

        -解析:将类、接口、字段和方法的符号引用转为直接引用

③Initialization(初始化)阶段

        - clinit方法为类的静态变量赋正确的初始值(显示赋值给static修饰的变量或者在静态代码块中赋值)

④类是使用阶段

⑤类的卸载阶段

- 类加载器

①引导类加载器Bootstrap ClassLoader:加载JAVA_HOME/jre/lib/rt.jar,没有父加载器,没有继承Class Loader,是系统加载器,C语言实现

②扩展类加载器Extension ClassLoader:加载JAVA_HOME/jre/lib/ext子目录下加载类库,父加载器是Bootstrap ClassLoader

③系统类加载器App ClassLoader:父加载器是扩展类加载器Extension ClassLoader

运行时数据区(Runtime Data Area):也称为Java堆,它是JVM用来存储对象实例和数组的地方。Java堆在JVM启动时就被创建,用于存储动态分配的内存。

方法区(Method Area):用于存储类的结构信息,如类的字段、方法信息、静态变量、常量池等。方法区在JVM启动时被创建,它是各个线程共享的内存区域。

堆(Heap):用于存储对象实例和数组对象。所有通过关键字 new 创建的对象都会在堆上分配内存。堆是Java虚拟机管理的最大的一块内存区域,它在JVM启动时被创建,并被所有线程共享。

程序计数器(Program Counter Register):用于存储当前线程正在执行的Java虚拟机字节码指令的地址。每个线程都有自己独立的程序计数器,用于记录下一条即将执行的指令地址。

本地方法栈(Native Method Stack):类似于虚拟机栈,但是用于执行本地(Native)方法的栈空间。本地方法栈也是线程私有的,存储的是调用本地方法时的状态信息。

虚拟机栈(VM Stack):每个线程在执行Java方法时,都会创建一个对应的栈帧(Stack Frame),用于存储方法的局部变量、操作数栈、动态链接、方法出口等信息。虚拟机栈的大小可以在启动时通过参数进行调整。

执行引擎(Execution Engine):负责执行Java字节码指令。执行引擎有两种主要实现方式:解释器和即时编译器(JIT)。解释器逐条解释字节码指令并执行,而即时编译器将字节码转换成本地机器代码,以提高执行效率。

解释器:逐行解释执行。

即时编译器(Just-In-Time Compiler,JIT):将经过多次解释执行的热点代码(HotSpot)编译成本地机器代码,以提高执行速度。JIT编译器会根据运行时的性能数据进行优化,从而提升程序的执行效率。

JNI(Java Native Interface):允许Java代码与本地代码(如C/C++)进行交互。JNI提供了一组API,使得Java代码可以调用本地方法,以便获得更高的灵活性和性能。

NML(Native Method Libraries):本地方法库,支持本地的一些类库。

结语

本节内容到这里就结束了,我们下期见。。。。。。

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

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

相关文章

数据变更捕获 (CDC):PostgreSQL 与 ClickHouse - 第一部分

本文字数:13442;估计阅读时间:34 分钟 审校:庄晓东(魏庄) 本文在公众号【ClickHouseInc】首发 简介 在之前的文章中,我们已经讨论了OLTP数据库(例如Postgres)和OLAP数据…

【go零基础】go-zero从零基础学习到实战教程 - 1项目表设计

既然是0基础,现在来写下设计思路,因为go-zero是个微服务架构,所以,哪怕是0基础,也从两个服务模块开始写起。 我们的目标是:最小可用微服务架构最佳实践! 好了,饼画完了。 第0部分写到…

504网关超时可能是哪些原因导致

当前随时互联网的发展普及,我们经常会使用到网站服务,许多网站为了提高打开速度,都会接入使用CDN。当我们在浏览网页或使用网络服务时,有时候可能有遇到网站打不开的情况,出现各式各样的错误代码,其中504网…

【注解和反射】通过反射动态创建对象、调用普通方法、操作属性

继上一篇博客【注解和反射】获取类运行时结构-CSDN博客 目录 八、通过反射动态创建对象 测试:通过反射动态创建对象 思考:难道没有无参的构造器就不能创建对象了吗?只要在操作的时候明确的调用类中的构造器并将参数传递进去之后,才可以实…

三维图形程序员必学-CGAL几何算法

GCAL几何算法库,涵盖了很多数学几何算法,矩阵运算、平面拟合、曲线拟合、曲面重建、网格优化、网格剖分、面线相交、布尔运算等等各种图形学几何相关的算法。 文章最后放了一个CGAL求点集拟合平面,投影求线的例子代码。 CGAL是一个开源代码库,官网连接GitHub - CGAL/cgal…

网络安全之弱口令与命令爆破(上篇)(技术进阶)

目录 一,什么是弱口令? 二,为什么会产生弱口令呢? 三,字典的生成 四,使用Burpsuite工具弱口令爆破 总结 一,什么是弱口令? 弱口令就是容易被人们所能猜到的密码呗,…

Linux动态追踪——eBPF

目录 摘要 1 什么是 eBPF 2 eBPF 支持的功能 3 BCC 4 编写脚本 5 总结 6 附 摘要 ftrace 和 perf 与 ebpf 同为 linux 内核提供的动态追踪工具,其中 ftrace 侧重于事件跟踪和内核行为的实时分析,perf 更侧重于性能分析和事件统计,与…

vim+xxd 编辑16进制

1. vim -b mib 2. 在vim 中执行 %!xxd, 这样就可以输入16进制: 3. 输入完成后,在vim中 执行 %!xxd -r 切换至原模式; 4. 保存退出即可 5. 重新打开mib文件:vim -b mib 6. 在vim 中执行 %!xxd, 查看是否符合预期:…

如何理解GDP、国民总收入(GNI)的区别和联系

国内生产总值和国民总收入是衡量一个国家(地区)经济状况和发展水平的两个重要总量指标。两者既有密切的联系,又有一定区别,用途都非常广泛。 一、GDP与GNI的基本概念 国内生产总值(Gross Domestic Product,GDP)&…

一个联合均值与方差模型的R包——dglm

目录 一、引言二、包的安装与载入三、模拟例子3.1 数据生成3.2 数据查看3.3 模型估计参数 一、引言 在 R 语言中,dglm 包是用于拟合双参数广义线性模型(Double Generalized Linear Models,简称 DGLMs)的一个工具。这类模型允许同…

模块三:二分——162.寻找峰值

文章目录 题目描述算法原理解法一:暴力查找解法二:二分查找 代码实现解法一:暴力查找解法二:CJava 题目描述 题目链接:162.寻找峰值 根据题意,需要使用O(log N)的时间复杂度来解决,得出本道题…

在美国站群服务器部署时如何保障从253个IP到1000个IP的无缝扩展?

在美国站群服务器部署时如何保障从253个IP到1000个IP的无缝扩展? 在当今企业的数字化转型中,服务器的部署和管理成为了保证业务连续性和拓展性的关键。尤其对于站群服务器来说,随着企业业务的增长和市场的扩展,需要从较小规模的253个IP地址…

AWTK 异形进度条控件发布

异形进度条控件。通过多边形来定义进度条的形状。 代码地址:https://gitee.com/zlgopen/awtk-widget-progress-polygon 特性 通过多边形定义进度条的形状支持通过图片来定义进度条的背景支持通过图片来定义进度条的前景 使用图片填充比使用颜色填充消耗更多的内…

数据结构练习-线性表定义与基本操作

----------------------------------------------------------------------------------------------------------------------------- 1. 线性表是( )。 A.一个有限序列,可以为空 B. 一个有限序列,不可以为空 C. 一个无限序列,可以为空…

第三次国土调查数据库字母缩写代表含义

CCWJQ拆除未尽区,CJDCQ村界调查区,CJDCQJX村界调查区界线,CLKZD测量控制点,CSKFBJ城市开发边界,CZCDYD城镇村等用地,DGX等高线,DLTB地类图斑,DZGY地质公园,FJMSQ风景名胜…

【一般排查思路】针对银河麒麟高级服务器操作系统磁盘空间已满

1. 本身磁盘空间已满 有时候我们会看到服务器上有提示“设备上没有空间”,如图1。 图 1 如果是磁盘本身空间已满,我们可以借助du工具来排查,比如首先cd / 切换到根目录,然后 du -sh * | sort -rh | head -n 3查看空间占用最大的…

【Unity】苹果(IOS)开发证书保姆级申请教程

前言 我们在使用xcode出包的时候,需要用到iOS证书(.p12)和描述文件(.mobileprovision) 开发证书及对应的描述文件用于开发阶段使用,可以直接将 App 安装到手机上,一个描述文件最多绑定100台测试设备 1.证书管理 进入网站Apple Developer &…

【C++】STL-vector模拟实现

目录 1、vactor的模拟实现 1.1 成员变量 1.2 size、capacity 1.3 迭代器 1.4 构造、析构、拷贝构造、operator 1.5 push_back、pop_back、reserve 1.6 operator[] 1.7 insert、erase 1.8 resize 2、使用memcpy拷贝问题 1、vactor的模拟实现 1.1 成员变量 vector是顺…

架构师系列-Nginx、OpenResty(一)- 基本使用配置

Nginx 模块 高度模块化的设计是 Nginx 的架构基础,Nginx 服务器被分解为多个模块,每个模块就是一个功能模块,只负责自身的功能,模块之间严格遵循“高内聚,低耦合”的原则。 核心模块 核心模块是 Nginx 服务器正常运行…

数据库系统原理实验报告4 | 数据完整性

整理自博主本科《数据库系统原理》专业课自己完成的实验报告,以便各位学习数据库系统概论的小伙伴们参考、学习。 专业课本: ———— 本次实验使用到的图形化工具:Heidisql 目录 一、实验目的 二、实验内容 1、建表 2、对1题中创建的Stud…