JVM的组成 -- 字节码文件

news2025/7/7 6:10:58

请添加图片描述

  • 类加载器(ClassLoader):将字节码文件加载到内存中
  • 运行时数据区(JVM管理的内存):负责管理JVM使用的内存,比如创建对象和销毁对象
  • 执行引擎:即时编译器、解释器、垃圾回收器。负责本地接口的调用
  • 本地接口:native方法,使用的是C++编写

一、 字节码文件组成

在这里插入图片描述

在这里插入图片描述

常量池和方法

常量池的作用:避免相同内容重复定义,节省空间。在常量池中存放一份数据,在其他地方引用。

常量池中的数据都有一个编号,编号从1开始,在字段或字节码指令中通过编号可以快速的找到对应的数据。

符号引用:字节码指令中通过编号引用到常量池的过程

存在两个数据结构:操作数栈和局部变量表

二、 类的生命周期

类的生命周期描述了一个类从类加载、使用、卸载的整个过程
在这里插入图片描述

1. 加载

加载阶段是类加载器根据类的全类名通过不同的渠道以二进制流的方式获取字节码信息
在这里插入图片描述

类加载完成后会将字节码信息保存至方法区,生成一个InstanceKlass对象,保存类的所有信息,里面还包含实现特定功能比如多态的信息。(C++编写)

同时JAVA虚拟机还会在堆中生成一份与方法区中数据类似的java.class.Class对象。作用是在Java代码中获取类的信息以及存储的静态字段的数据(JDK8之后)(JAVA编写)
在这里插入图片描述

方法区和堆中分别有一份数据,这样的话,JVM就可以很好的控制开发者的访问权限。

2.连接

2.1 验证
验证字节码信息是否满足《Java虚拟机规范》,比如对头魔数的校验(ca fe ba be)、版本号等的校验、元信息的校验(必须有父类)、指令是否正确等
在这里插入图片描述
在这里插入图片描述

2.2 准备
为静态(static)变量分配内存并设置初始值,针对静态常量(static final)则会在该阶段直接进行赋值。
在这里插入图片描述
准备阶段只会给静态变量赋初始值,而每一种基本数据类型和引用类型都有其初始值。

数据类型初始值
int0
long0L
short0
char‘\u0000’
byte0
booleanfalse
double0.0
引用数据类型null

final修饰的基本数据类型的静态变量,准备阶段会直接将代码中的值进行赋值。

这样的话在修改final的值后,必须重新编译,不能直接更新运行

2.3 解析
将常量池中的符号引用替换成指向内存的直接引用。

符号引用:使用常量池中的编号进行访问

直接引用:使用内存中的地址访问
在这里插入图片描述

3.初始化

init:构造方法时执行
mian:Main方法
clinit:初始化阶段执行

主要操作:执行静态代码块和为静态变量赋值
该阶段会执行方法中的clinit方法中的部分指令,clinit方法是与JAVA代码中的方法顺序执行一致。

3.1 类初始化的几种方式

  • 访问一个类的静态变量或者静态方法(如果变量是final修饰的并且等号右边是常量不会触发初始化,因为在连接阶段会直接赋常量值)
  • 调用Class.forName(name)方法
  • new对象时
  • 执行Main方法的当前类。

3.2 clinit()不会出现的几种方式

  • 无静态代码块或者无静态变量赋值语句
  • 有静态变量的声明,但是没有赋值语句
  • 静态变量中使用final修饰,该常量在连接-准备阶段进行赋值

3.3 注意

  • 直接访问父类的静态变量,只初始化父类,不会触发子类的初始化
  • 子类初始化clinit之前会先调用父类的clinit方法
  • 数组的创建不会导致数组中元素的类进行初始化。(Demo[] demos = new Demo[10]),并不会初始化Demo类
  • final修饰的常量,如果赋值的内容需要执行指令才能够得出结果,则会在clinit方法时进行初始化(private static final int i = Integer.valueOf(10))

4.使用

5.卸载

垃圾回收中实现

在这里插入图片描述

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

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

相关文章

高等数学 第八讲 积分学计算_不定积分_定积分_反常积分的计算

高等数学 第八讲 积分学计算 文章目录 高等数学 第八讲 积分学计算1.不定积分的计算1.1 基本积分公式1.2 不定积分的计算方法1.2.1 凑微分法1.2.2 换元法1.2.3 分布积分法1.2.4 有理函数的积分计算(待更新)1.2.5 不定积分的一些计算结论总结 2.定积分的计算2.1 牛顿莱布尼茨公式…

大数据Flink(一百零八):阿里云与开源的功能优势对比

文章目录 阿里云与开源的功能优势对比 阿里云与开源的功能优势对比 下面通过表格介绍阿里云实时计算Flink全托管产品的功能点和价值,以及和开源Flink的对比优势。 类型 功能 描述 价值 性能与成本 资源利用率提升 可以根据业务负载进行弹性扩缩容。 更好的…

手摸手教你前端和后端是如何实现导出 Excel 的?

前言 大家好呀,我是雪荷。在上篇文章(EasyExcel 初使用—— Java 实现多种写入 Excel 功能-CSDN博客)中给大家介绍了 Java 是如何写入 Excel 的,那么这篇算是对上篇文章的拓展,主要介绍前端和后端分别是如何导出数据至…

一篇了解: MyBatis-Plus 操作数据库的使用

目录 一、MyBatis-Plus介绍 二、基础使用 2.1 准备工作 2.2 编码 2.3 CRUD单元测试 三、MyBatis-Plus复杂操作 3.1 打印日志 3.2 常见注解 3.2.1 TableName 3.2.2 TableField 3.2.3 TableId 3.3 条件构造器 3.3.1 QueryWrapper 3.3.2 UpdateWrapper 3.3.3 Lamb…

网络空间安全专业怎么样,可通过哪些途径自学?

网络空间安全主要研究网络空间的组成、形态、安全、管理等,进行网络空间相关的软硬件开发、系统设计与分析、网络空间安全规划管理等。例如,网络犯罪的预防,国家网络安全的维护,杀毒软件等安全产品的研发,网络世界的监…

计算机常识与NOIP历史-CSP初赛知识点整理

真题练习 [2021-CSP-J-第2题] 以下奖项与计算机领域最相关的是( )。 A.奥斯卡奖 B.图灵奖 C.诺贝尔奖 D.普利策奖 [2017-NOIP-第7题] 中国计算机学会于( )年创办全国青少年计算机程序设计竞赛。 A. 1983 B. 1984 C. 1985 D. 1986 [2018-NOIP-第5题…

Professional Scrum Master (PSM) 官方认证培训班:掌握Scrum,提升项目管理能力

在快速变化的商业环境中,高效的项目管理和团队协作是企业成功的关键。作为一种广泛认可的敏捷框架,Scrum已成为推动项目成功和提高团队效率的重要工具。为了帮助专业人士掌握Scrum方法和实践,Scrum.org推出了Professional Scrum Master (PSM)…

C++ 初探:不要‘下次一定’,立即开始你的C++之旅

C初识 文章目录 C hello worldnamespace,命名空间命名空间的使用域作用限定符展开命名空间指定展开命名空间成员 C的域 C的输入和输出缺省参数函数重载引用(reference)引用概念引用的特性引用的使用const引用 inlinenullptr C hello world #…

学习C语言遇到的问题

前言 这是博主在班训班培训期间学习C基础过程中遇到的一些问题,我把遇到的问题以及这些问题的解答链接统一放在这篇文章了。这只是博主遇到的一些问题,可能不会适用于全部人,希望大家把这篇文章当做查漏补缺的内容吧。 问题一:把字符串赋给…

三十种未授权访问漏洞复现 合集( 三)

未授权访问漏洞介绍 未授权访问可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷,导致其他用户可以直接访问,从而引发重要权限可被操作、数据库、网站目录等敏感信息泄露。---->目录遍历 目前主要存在未授权访问漏洞的有:NFS服务&a…

CnosDB 元数据集群 – 分布式时序数据库的大脑

CnosDB 是一个分布式时序数据库系统,其中元数据集群是核心组件之一,负责管理整个集群的元数据信息。 1. 概述 CnosDB 是一个分布式时序数据库系统,其中元数据集群是核心组件之一,负责管理整个集群的元数据信息。元数据包括数据库…

用Ollama 和 Open WebUI本地部署Llama 3.1 8B

说明: 本人运行环境windows11 N卡6G显存。部署Llama3.1 8B 简介 Ollama是一个开源的大型语言模型服务工具,它允许用户在自己的硬件环境中轻松部署和使用大规模预训练模型。Ollama 的主要功能是在Docker容器内部署和管理大型语言模型(LLM&…

[CR]厚云填补_GridFormer

GridFormer: Residual Dense Transformer with Grid Structure for Image Restoration in Adverse Weather Conditions Abstract 恶劣天气条件下的图像恢复是计算机视觉中的一个难点。在本文中,我们提出了一种新的基于变压器的框架GridFormer,它可以作为…

【Android】ContentProvider基本概念

ContentProvider Android权限机制详解 <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"com.example.broadcasttest"> <uses-permission android:name"android.permission.RECEIVE_BOOT_COMPLETED" />…

8.2 grafana上导入模板看图并讲解告警

本节重点介绍 : grafana 上导入mysqld-dashboardglobal status 相关源码解读重要指标讲解 连接数内存TPS、QPS 将采集任务添加到prometheus中 - job_name: mysqld_exporterhonor_timestamps: truescrape_interval: 8sscrape_timeout: 8smetrics_path: /metricsscheme: httpf…

七天打造一套量化交易系统:Day7-实盘交易接入方式与注意事项

七天打造一套量化交易系统&#xff1a;Day7-实盘交易接入方式与注意事项 前情回顾证券交易接口XTP 接口头文件列表XTP 接口 demo 示例 期货交易接口CTP-API开发系列专栏 数字货币交易接口实盘接入注意事项 量化交易系统的核心要素包括选择投资标的、资金的分配、何时入场、何时…

Midjourney咒语之装修设计

装修设计 living room with a chinese shanshui painting frame on a wall with a 2 inch frame, colors: blue, white, focus on the picture, 35mm lens, realistic, design, commercial, plants, furniture, centered painting --s 750 --ar 16:9 80 square meter minimalis…

浅谈简单的搜索算法(c++)

目录 DFS思路实现应用场景DFS 的优缺点优点缺点 例题讲解N皇后问题[题目描述]输入输出样例输入样例输出 思路AC代码排列数字[题目描述]输入格式输出格式数据范围输入样例&#xff1a;输出样例&#xff1a;思路AC代码 树的重心[题目描述]输入格式输出格式数据范围输入样例输出样…

百度网盘不下载怎么直接打印文件?

在数字化时代&#xff0c;百度网盘作为我们存储和分享文件的重要工具&#xff0c;承载了大量的文档、图片和资料。然而&#xff0c;当需要打印这些文件时&#xff0c;很多用户会面临一个共同的问题&#xff1a;不想下载到本地再打印&#xff0c;既占用空间又浪费时间。那么&…

自闭症儿童无法上学?专业康复机构是希望的灯塔

面对自闭症儿童因特殊需求而无法融入普通学校的困境&#xff0c;每一位家长的心中都充满了焦虑与无助。然而&#xff0c;在这个充满挑战的时刻&#xff0c;选择一条科学、系统的康复之路&#xff0c;成为了引领孩子走向未来的关键。星启帆&#xff0c;作为国内规模较大全寄宿制…