JVM类加载机制-JVM(一)

news2024/11/24 1:46:40
  1. 我们运行一个.class文件,windows下的java.exe调用底层jvm.dll文件创建java虚拟机(c++实现)。
  2. 创建一个引导类加载器实例(c++实现)
  3. C++调用java代码Launcher,该类创建其他java类加载器。
  4. Launcher.getClassLoader()调用loaderClass加载运行类Math
  5. classLoader.loader(“com.jvm.math”)加载main方法入口
  6. Main运行java程序

 

  • 类的加载

加载分为 验证、准备、解析、初始化

  1. 验证

.class里开头是cafe babe是字节码开头格式

如果开头不是这个,则代表不是字节码.class文件。

  1. 准备

类里的静态变量分配内存,先赋默认值,比如对象会先赋值为null,int会赋值为0,boolean的话会赋值为false等。加载完后才会给真实的值。

(注意:final是常量,直接赋值真实的值,加了final就是常量,不可变)

  1. 解析(比较复杂)

先将符号引用转成直接引用,该阶段把静态方法(比如main方法)替换为指向数据所存内存的指针,这就是所谓静态链接过程(类加载期间完成),动态链接是程序运行期间完成的将符号引用替换为直接引用。

(举个例子:main方法这一行都属于静态数据,会转换成内存里的指针,属于静态链接。而main方法里调用的其他方法,这种就属于动态链接。)

  1. 初始化

对类的静态初始化指定值,执行静态代码块。

最后运行 和 结束。

Jvm属于懒加载,只有依赖的时候才会去加载。

比如静态代码块,只有在加载某个类的时候执行,效果类似。

先加载类里的静态代码块,构造方法是在类加载之后调用的,因为必须类加载完构造方法初始化才可以执行,类都没加载完,构造函数必定执行不了。

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

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

相关文章

【算法】最长公共子序列编辑距离(两个序列之间的DP)

文章目录 最长公共子序列(LCS)编辑距离(Edit Distance)总结相关题目练习583. 两个字符串的删除操作 https://leetcode.cn/problems/delete-operation-for-two-strings/712. 两个字符串的最小ASCII删除和 https://leetcode.cn/prob…

BWA序列比对方法丨针对较大基因组的并行计算和性能优化方式,利用多线程和负载均衡策略提高效率

BWA 序列比对 高通量测序技术日新月异发展迅猛,产生了数亿级大数据,生命的世界由DNA序列ATCG组成,正如计算机的世界由二进制01组成。 高通量测序的工作实质是把一本生命字典撕成碎片,然后每人手里拿一片,招募成千上万…

【洛谷】B3644 【模板】拓扑排序 / 家谱树(用邻接表存储和其他题解不一样哦)

本薅蒻通过这次学到的知识点(本人认为好用的东西): 1: (情况适用于输入的x为0时结束输入) 2: 先输出“t”(就是因为这里wa了好几发,555555) 原本是在 if里面输出的,这…

mysql通过存储过程解决ERROR 1060 (42S21): Duplicate column的问题

问题描述 实际的日常开发工作中,经常需要对现有表的结构作出变更,涉及到sql相关的操作,基本都通过初始化脚本来完成,如果初始化脚本运行失败或者遇到其他问题,可能导致sql部分执行,不分失败的问题&#xf…

ModaHub ——向量数据库Milvus特征向量和预写式日志教程

目录 特征向量 什么是特征向量 特征向量的优势 应用领域 预写式日志 数据可靠性 缓冲区设置 旧日志删除 特征向量 什么是特征向量 向量是具有一定大小和方向的量,可以简单理解为一串数字的集合,就像一行多列的矩阵,比如&#xff1a…

领域事件驱动(三)子域

上一章对领域层的相关概念做了阐述 应用服务 应用层作为展现层与领域层的桥梁,是用来表达用例和用户故事的主要手段。 应用层通过应用服务接口来暴露系统的全部功能。在应用服务的实现中,它负责编排和转发,它将要实现的功能委托给一个或多…

蓝桥杯刷题-1

文章目录 1.蓝桥杯官网2.蓝桥杯题目进入界面 及 题目详情3.题目解答过程及思路4.运行结果图5.解答代码展示6.ASCII表图例 大家好,我是晓星航。今天为大家带来的是 蓝桥杯刷题 - 1 -单词分析 相关的讲解!😀 1.蓝桥杯官网 题库 - 蓝桥云课 (l…

source insight小键盘在vim中不能使用数字(数字按键变英文)

文章目录 问题描述解决办法注意: 问题描述 在使用source insight登录远程服务器并使用vim编辑模式时,出现数字键盘的0-9变成了yxwvutsrqp情况。 解决办法 注意: 如果你点了save as…的话,会让你保存untitled.key文件到你指定的路…

Redis保姆级安装(windows版)

MySQL是一种传统的关系型数据库,我们可以使用MySQL来很好的组织跟管理我们的数据 但是MySQL的缺点也是很明显的!他的数据始终是存在硬盘里的,对于我们的用户的信息经常不修改的内容用MySQL存储的确可以,但是如果要快速更新或者是频…

Excel的一些操作:移动列,添加索引

移动列 在 Excel 中移动列的 5 种方法——分步教程 选中某一列,然后鼠标放在边缘,移动到你想移动到的列 添加索引 例如,我想添加的索引列名为“index”,然后选中想要添加序列的行,点击“填充-->录入123序列”

顶部导航菜单组件的一种做法

今天来分享一款顶部导航的菜单做法&#xff0c;可以参考一下。 它的效果是这个样子的。虽然不算太好看&#xff0c;但是也能实现具体功能 &#xff0c;剩了不少时间。 废话不多说&#xff0c;直接上代码。 以下是html代码。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHT…

【Spring】Bean的作用域与生命周期详情:请简述Spring的执行流程并分析Bean的生命周期?

前言 我们都知道&#xff0c;Spring框架为开发人员提供了很多便捷&#xff0c;这使得开发人员能够更加专注于应用程序的核心业务逻辑&#xff0c;而不需要花费大量时间和精力在技术细节上。作为一个包含众多工具方法的IoC容器&#xff0c;存取JavaBean是其极为重要的一个环节。…

vue + leaflet实现图标指定方向随机旋转

效果 github地址 官方示例Demo 安装leaflet-rotatedmarker npm install leaflet-rotatedmarker -S引入leaflet.rotatedmarker import leaflet-rotatedmarker实现 this.laryerGroup this.$L.layerGroup() data.forEach(item > {this.layerGroup.addLayer(this.getMarke…

【tomcat知识点和部署】

文章目录 一、tomcat概述1.1 tomcat的介绍1.2 tomcat的特点 二、tomcat核心组件2.核心组件的介绍2.1 Web容器2.2 servlet容器2.3 JSP容器2.4 Tomcat核心组件的请求方式&#xff08;交互方式&#xff09;2.4.1 Web容器2.4.2 JSP容器2.4.3 serverlet容器2.5 Tomcat处理请求&#…

第六章 linux调试器——gdb的使用

第六章 linux调试器——gdb的使用 一、前提1、debug与release2、gdb的安装 二、常用调试指令1、开始调试2、代码显示3、断点设置4、代码执行5、信息监控6、退出调试 一、前提 1、debug与release 程序最终的发布方式分成两种&#xff0c;一种是debug模式&#xff0c;一种是rel…

华为OD机试真题 Python 实现【机器人活动区域】【2023Q1 200分】

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Python算法源码六、效果展示1、输入2、输出 一、题目描述 现有一个机器人&#xff0c;可放置于 M N的网格中任意位置&#xff0c;每个网格包含一个非负整数编号。当相邻网格的数字编号差值的绝对值小于等于 1 时&a…

redis-单节点安装

daemonize yes port 6379 bind 0.0.0.0 requirepass 123456 save 3600 1 300 100 60 10000dir /usr/local/redis dbfilename dump.rdb logfile redis.log pidfile redis.pid##save 3600 1 300 100 60 10000 ##3600秒(一小时),至少有一个值的话,会进行存盘 ##300秒(五分钟),至少…

探索性测试: 工具和方法的综合应用

1、前言 2、工具的使用 1、测试管理工具 2、缺陷跟踪工具 3、测试自动化工具 4、探索性测试工具 5、代码覆盖率工具 6、日志分析工具 7、网络抓包工具 8、数据库查询工具 9、并发和负载测试工具 10、安全测试工具 11、API测试工具 12、数据生成工具 13、异常处理和边界测试工具…

server2012远程桌面RDP120过期后修改

运行regedit 进入 HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Terminal Server \ RCM \ GracePeriod &#xff0c;选中 GracePeriod 重启电脑Ok

572. 另一棵树的子树

另一棵树的子树 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def isSubtree(self, root: Optional[Tre…