jvm的启动过程

2023-11-08

一、JVM的装入环境和配置

在学习这个之前,我们需要了解一件事情,就是JDK和JRE的区别。
JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境,JDK中包含了JRE。
JRE是Java的运行环境,是面向所有Java程序的使用者,包括开发者,即JRE = 运行环境 = JVM。
如果安装了JDK,会发现电脑中有两套JRE,一套位于/Java/jre…/下,一套位于/Java/jdk…/jre下。那么问题来了,一台机器上有两套以上JRE,谁来决定运行那一套呢?这个任务就落到java.exe身上,java.exe的任务就是找到合适的JRE来运行java程序
java.exe按照以下的顺序来选择JRE:
自己目录下有没有JRE
父目录下有没有JRE
查询注册表
: HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\当前JRE版本号\MSI
这几步的主要核心是为了找到JVM的绝对路径
jvm.cfg的路径为:C:\Program Files\Java\jdk-11.0.13\lib\jvm.fig
jvm.cfg的内容大致如下:
client KNOWN
server KNOWN
hotspot ALIASED_TO -client
classic WARN
native ERROR
green ERROR
KNOWN 表示存在 、IGNORE 表示不存在 、ALIASED_TO 表示给别的JVM去一个别名
WARN 表示不存在时找一个替代 、ERROR 表示不存在抛出异常。

二、装载JVM

通过第一步找到JVM的路径后,Java.exe通过LoadJavaVM来装入JVM文件。LoadLibrary装载JVM动态连接库,然后把JVM中的到处函数JNI_CreateJavaVM和JNI_GetDefaultJavaVMIntArgs 挂接到InvocationFunction 变量的CreateJavaVM和GetDafaultJavaVMInitArgs 函数指针变量上。JVM的装载工作完成。

三、初始化JVM,获得本地调用接口

调用InvocationFunction -> CreateJavaVM也就是JVM中JNI_CreateJavaVM方法获得JNIEnv结构的实例。

四、运行Java程序

JVM运行Java程序的方式有两种:jar包 与 Class,运行jar 的时候,Java.exe调用GetMainClassName函数,该函数先获得JNIEnv实例然后调用JarFileJNIEnv类中getManifest(),从其返回的Manifest对象中取getAttrebutes(“Main-Class”)的值,即jar 包中文件:META-INF/MANIFEST.MF指定的Main-Class的主类名作为运行的主类。之后main函数会调用Java.c中LoadClass方法装载该主类(使用JNIEnv实例的FindClass)。
运行Class的时候,main函数直接调用Java.c中的LoadClass方法装载该类。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jvm的启动过程 的相关文章

随机推荐

  • 分布式爬虫理念

    目录 分布式爬虫理念 1 分布式爬虫框架 2 维护爬取队列 3 去重 4 防止中断 1 分布式爬虫框架 Scrapy中有一个本地爬取队列Queue 这个队列是利用depue模块实现的 新的Repuest生成就会被放到队列里 随后被调度器Sc
  • java 循环遍历字符串_Java 程序迭代遍历字符串中的每个字符

    Java 程序迭代遍历字符串中的每个字符 在本教程中 我们将学习遍历字符串的每个字符 要理解此示例 您应该了解以下Java编程主题 示例1 使用for循环遍历字符串的每个字符 示例class Main public static void
  • Python第三课

    枭 Python第三课 今天讲解了Python的 深浅复制 列表排序与逆序 随机数 列表推导式 深浅复制 浅复制 概念 浅复制是生成一个新的列表 把原列表的所有引用全复制到新列表中 切片返回的就是浅复制 在浅复制中 如若旧列表中包含有列表
  • 图的存储和遍历

    一 图的存储 因为图中既有节点 又有边 节点与节点之间的关系 因此 在图的存储中 只需要保存 节点和 边关系即可 节点保存比较简单 只需要一段连续空间即可 1 邻接矩阵 因为节点与节点之间的关系就是连通与否 即为0或者1 因此邻接矩阵 二维
  • 区块链应用到供应链上,有哪些好处?

    据中企通宝区块链技术研究中心的负责人介绍 使用区块链的最突出的优势之一 就是它可以让数据的交互性更强 由于这点 公司可以更容易地和制造商还有供应商等等来分享信息和数据 区块链的透明性可以帮助减少延迟 同时防止产品停滞在供应链 每个产品都能实
  • JWT 详解

    1 JWT是什么 JSON Web Token JWT 是一个开放标准 RFC 7519 它定义了一种紧凑的 自包含的方式 用于作为JSON对象在各方之间安全地传输信息 该信息可以被验证和信任 因为它是数字签名的 2 JWT和传统Sessi
  • 竞赛 Yolov安全帽佩戴检测 危险区域进入检测 - 深度学习 opencv

    1 前言 优质竞赛项目系列 今天要分享的是 Yolov安全帽佩戴检测 危险区域进入检测 学长这里给一个题目综合评分 每项满分5分 难度系数 3分 工作量 3分 创新点 4分 该项目较为新颖 适合作为竞赛课题方向 学长非常推荐 更多资料 项目
  • 用友U8+产品--操作系统、数据库、浏览器推荐支持一览表

    目录 业务场景 用友U8 各版本服务器安装 Windows 操作系统推荐一览表 用友U8 各版本客户端安装 Windows 操作系统推荐一览表 用友U8 各版本数据库安装 SQL Server 版本推荐一览表 用友U8 各版本WEB门户 浏
  • 物联网如何为智慧城市提供动力

    智慧城市可以创造一个基础设施顺畅 效率提升的乌托邦 改善城市地区的生活质量 促进当地经济发展 其影响意义重大 预计到 2024 年智慧城市基础设施的收入将超过 1000 亿美元 从改善公共交通到解决犯罪问题和提高能源效率 应有尽有 智慧城市
  • 基于卷积神经网络cnn的情感分析代码

    说先看一下这个图 它大体介绍了CNN的自然语言处理流程 1 首先每个单词对应一行 d 5表示分了5个维度 一般是分128维 300维之类的 这里为了方便 用d 5 这样的话矩阵就是7 5 2 然后第一步进行卷积的操作 分别使用了四行的卷积核
  • 机器学习面试笔记

    本文结合 百面机器学习 一书进行整理 1 为什么需要对数值类型的特征做归一化 对数值类型归一化可以将所有的特征都统一到一个大致相同的数值区间内 常用方法 1 线性函数归一化 对原始数据进行线性变换 使结果映射到 0 1 范围内 公式 2 零
  • 【数据异常校验】肖维勒准则(Chauvenet Criterion)处理异常数据

    介绍 在统计理论中 肖维勒准则 以William Chauvenet命名 是评估一组实验数据 一组异常值 是否可能是虚假的一种手段 肖维勒准则背后的想法是找到一个以正态分布的均值为中心的概率带 它应该合理地包含数据集的所有n个样本 通过这样
  • 在ios系统上实现更改IP地址

    在当今的互联网环境中 我们经常需要更改手机的IP地址来避免一些限制或保护我们的隐私 然而 在iOS系统上 更改IP地址并不像在其他平台上那么容易 因此 本文将分享一种简单的方法 帮助您在iOS系统上免费更改手机的IP地址 在iOS系统上 我
  • html账号不能为空,在HTML5 中,( )属性用于规定输入框填写的内容不能为空,否则不允许用户提交表单。...

    AT89C51单片机串行口的4种工作方式中 中则和的波特率是可调的 与定时器 计数器T1的溢出率有关 另外两种方式的波特率是固定的 协助扩散就是协同运输 属性输入是物质从高浓度侧转运到低浓度侧 不需要消耗能量 用于允许用户Task 2 Fi
  • stm32 hal库接收不定长数据程序

    协议层 串口通讯的数据包由发送设备通过自身的 TXD 接口传输到接收设备的 RXD 接口 在串口通讯的协议层中 规定了数据包的内容 它由启始位 主体数据 校验位以及停止位组成 通讯双方的数据包格式要约定一致才能正常收发数据 其组成见图 波特
  • HashMap和HashTable的区别(面试题)

    HashMap和HashTable的区别 面试题 概念 HashMap HashTable 对比 总结 概念 HashMap 基于哈希表的 Map 接口的实现 此实现提供所有可选的映射操作 并允许使用 null 值和 null 键 除了非同
  • MySQL创建数据库和创建数据表

    MySQL 创建数据库和创建数据表 MySQL 是最常用的数据库 在数据库操作中 基本都是增删改查操作 简称CRUD 在这之前 需要先安装好 MySQL 然后创建好数据库 数据表 操作用户 一 数据库操作语言 数据库在操作时 需要使用专门的
  • python中time方法,生成当前时间年月日时分秒

    在Python中 可以使用time模块中的strftime 方法结合时间格式化字符串来生成当前的年月日时分秒 下面是一个详细解释的示例代码 import time 获取当前时间的时间戳 current timestamp time time
  • png在ai转为路径_ai怎么把png转换为路径

    1 png格式转为ai格式 解决如何将png图像转换成清晰的ai或者cdr矢量图的步骤如下 1 打开PS软件 打开JPG的图片文件 文件 打开 选择图片存放的路径 找到文件 打开 png 429 230 60238 0 gt 2 这是一个非
  • jvm的启动过程

    一 JVM的装入环境和配置 在学习这个之前 我们需要了解一件事情 就是JDK和JRE的区别 JDK是面向开发人员使用的SDK 它提供了Java的开发环境和运行环境 JDK中包含了JRE JRE是Java的运行环境 是面向所有Java程序的使