jvm虚拟机初识

JVM

Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行。每一条Java指令,Java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。

特点:

  • 一次编译,到处运行
  • 自动内存管理
  • 自动垃圾回收功能

JVM的位置

JVM是运行在操作系统之上的,它与硬件没有直接的交互

JVM整体结构

Java虚拟机(JVM)是一个包含多个组件的运行时环境。其核心组件包括类加载子系统、运行时数据区、执行引擎、本地接口和本地方法库。类加载子系统负责加载Java类,而运行时数据区包括方法区和堆,堆又分为新生代和老年代。执行引擎负责解释和执行Java字节码,同时具备即时编译器提高性能。本地接口允许Java代码与本地代码进行交互,而本地方法库包含与底层操作系统相关的本地方法。这些组件协同工作,使得Java程序能够在不同平台上高效运行。


- **Class Loader Subsystem(类加载子系统)**- Bootstrap Class Loader- Extension Class Loader- Application Class Loader- **Runtime Data Area(运行时数据区)**- **Method Area(方法区)**- **Heap(堆)**- New Generation(新生代)- Eden Space(伊甸区)- Survivor Spaces (S0, S1)(幸存者区)- Old Generation(老年代)- PermGen / Metaspace(永久代 / 元空间)- **Execution Engine(执行引擎)**- **Interpreter(解释器)**- **Just-In-Time (JIT) Compiler(即时编译器)**- **Garbage Collector(垃圾收集器)**- **Native Interface(本地接口)**- Native Method Interface(本地方法接口)- **Native Method Libraries(本地方法库)**

Java代码执行流程

Java 源码编写

开发人员使用 Java 编写源代码,这些源代码以 .java 为扩展名。

Java 编译器(javac)

使用 Java 编译器 (javac) 将源代码编译成字节码文件(以 .class 为扩展名)。这个阶段生成的字节码文件包含了 Java 字节码指令,是与平台无关的中间代码。

类加载器

类加载器负责加载字节码文件到内存中,形成类的运行时数据结构。Java 的类加载器体系通常包括启动类加载器、扩展类加载器和应用程序类加载器。

字节码验证器:

字节码验证器确保字节码符合 Java 虚拟机规范,防止恶意代码和错误。验证包括类型检查、访问权限检查、代码转换检查等。

字节码解释执行或JIT编译:

执行引擎负责将字节码指令解释执行或者通过即时编译器(JIT 编译器)将字节码编译成本地机器码,以提高执行效率。JIT 编译器将热点代码(经常执行的代码)编译成本地机器码,加速程序的执行。

运行时数据区

在运行时数据区中,包括方法区、堆、虚拟机栈、本地方法栈、程序计数器等。这些区域用于存储程序的状态、方法的运行时信息、对象实例等。

本地方法调用

如果 Java 代码中包含了本地方法调用(native 关键字),则调用本地方法接口(JNI)与本地方法库进行连接。本地方法接口负责将 Java 数据类型转换为本地方法支持的数据类型,并调用本地方法库中的函数。

本地方法库:

本地方法库是由本地语言(如 C 或 C++)编写的库,其中包含与 Java 代码进行交互的本地方法的实现。当执行引擎调用本地方法时,实际的执行是在本地方法库中完成的。

操作系统

Java 虚拟机与操作系统交互,使用操作系统提供的服务和资源。这可能包括文件系统、网络、线程管理等。

最终执行

Java 程序的最终执行是通过执行引擎执行字节码指令,从而按照程序的逻辑改变程序状态,包括对栈、堆和方法区的操作。整个过程中,涉及到了类加载、字节码验证、执行引擎执行、本地方法调用等多个组成部分。

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

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

相关文章

服务器监控软件夜莺使用(二)

文章目录 一、采集器安装1. Categraf简介2. Categraf部署3. 测试服务器部署4. 系统监控插件5. 显卡监控插件6. 服务监控插件 二、监控仪表盘1. 机器列表2. 系统监控3. 服务监控 三、告警配置1. 邮件通知2. 告警规则3. 告警自愈 一、采集器安装 1. Categraf简介 Categraf 需要…

聚道云软件连接器助力某贸易公司实现付款流程自动化

客户介绍: 某贸易公司是一家集进出口贸易、国内贸易、电子商务等业务于一体的综合性贸易企业。公司业务遍及全球多个国家和地区,拥有庞大的供应商网络和采购需求。 添加图片注释,不超过 140 字(可选) 客户痛点&#…

CAN转RS232学习笔记

2024-1-9 用keil打开工程后,打开main.c文件 报错:error in include chian 网络解决方法: KEIL消除警告:error in include chain(cmsis_armcc.h):expected identifier or ‘(‘-CSDN博客 上文链接包含的链接(套娃&am…

前端JS加密对抗由浅入深-2

前言: 本文主要讲解,针对前端非对称、多段加密数据传输站点,如何进行动态调试,如何进行安全测试。本次讲解不涉及任何漏洞方面,仅为学习探讨,该站点现已经更改加密方式,严禁非法测试&#xff0…

如何使用内网穿透实现iStoreOS软路由公网远程访问局域网电脑桌面

文章目录 简介一、配置远程桌面公网地址二、家中使用永久固定地址 访问公司电脑**具体操作方法是:** 简介 软路由是PC的硬件加上路由系统来实现路由器的功能,也可以说是使用软件达成路由功能的路由器。 使用软路由控制局域网内计算机的好处&#xff1a…

一文弄懂SpringCloud Stream

目录 SpringCloud StreamSpringCloud Stream相关概念SpringCloud Stream使用 SpringCloud Stream Spring Cloud Stream 是一个构建消息驱动微服务的框架,Spring Cloud Stream 提供了一个抽象层,屏蔽了不同消息中间件之间的差异,使得开发人员…

Java学习笔记-day05-响应式编程初探-自定义实现Reactive Streams规范

最近在学响应式编程,这里先记录下,响应式编程的一些基础内容 1.名词解释 Reactive Streams、Reactor、WebFlux以及响应式编程之间存在密切的关系,它们共同构成了在Java生态系统中处理异步和响应式编程的一系列工具和框架。 Reactive Streams…

3D人体姿态估计

3D人体姿态估计是指通过算法对输入的图像或视频进行分析,推断出人体的三维姿态信息。该技术可以应用于许多领域,如虚拟现实、运动分析、人机交互等。 1. 算法原理: 3D人体姿态估计利用深度学习模型作为算法的核心,通过网络学习人…

html js加载本地文件报错处理,跨域问题

这个问题是怎么来的?我写了一个本地html文件,里面通过three.js加载并显示一个本地三维模型,结果报错了。 报错如下: Access to XMLHttpRequest at file:///C:/model/quater.mtl from origin null has been blocked by CORS poli…

是面试官放水,还是公司实在是太缺人?这都没挂,字节原来这么容易进....

“字节是大企业,是不是很难进去啊?” “在字节做软件测试,能得到很好的发展吗? 一进去就有11.5K,其实也没有想的那么难” 直到现在,心情都还是无比激动! 本人211非科班,之前在字节和…

uni-app发版及分包要求

uni-app发版及分包要求 发版 注意,小程序的接口不允许http,只支持https。仅仅是https还不够,正式版和体验版上的接口功能实现还需要将接口地址添加到开发管理——开发设置——服务器域名——request合法域名中去。否则,手机预览…

Spark---RDD(双值类型转换算子)

文章目录 1.RDD双值类型算子1.1 intersection1.2 union1.3 subtract1.4 zip 1.RDD双值类型算子 RDD双Value算子就是对两个RDD进行操作或行动,生成一个新的RDD。 1.1 intersection 对源 RDD 和参数 RDD 求交集后返回一个新的 RDD 函数定义: def inters…

解读 Sobit v2:铭文资产跨链更注重安全、易用性

铭文市场的发展正在从早期的“无序”进入到“有序”阶段,我们看到从 12 月份以来,比特币生态内的多个应用纷纷宣布获得融资。这表明,目前仍旧有大量的资金有意向铭文领域,同样铭文赛道新一轮浪潮或许正在酝酿。 另一方面&#xff…

【设计模式-01】Singleton单利模式

一、方式1(最常用,推荐使用) 单例实现方式一: 饿汉式 类加载到内存后,就实例化一个单例,JVM保证线程安全 简单实用,推荐使用。 唯一缺点: 不管用到与否,类装载时就完成加载。 /*** description: 单例实现方式一: 饿汉…

Java 求2个整数,3个整数 的 10等分比例值

10等份取整比 比如 1.5 : 4 : 4.5 会变成 1:4:5 ,当然小数后一位的四舍五入是向上还是向下去整,这个根据自己需要调整即可。 代码 : public static Integer getIntTenPerNum(Integer nu…

YOLOv8改进 | Neck篇 | 利用ASF-YOLO改进特征融合层(适用于分割和目标检测)

一、本文介绍 本文给大家带来的改进机制是ASF-YOLO(发布于2023.12月份的最新机制),其是特别设计用于细胞实例分割。这个模型通过结合空间和尺度特征,提高了在处理细胞图像时的准确性和速度。在实验中,ASF-YOLO在2018年数据科学竞赛数据集上取得了卓越的分割准确性和速度,…

Java项目:115SSM宿舍管理系统

博主主页:Java旅途 简介:分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 宿舍管理系统基于SpringSpringMVCMybatis开发,系统主要功能如下: 学生管理班级管理宿舍管理卫生管理维修登记访客管理 二、技术框…

网络安全新形势下的动态防御体系研究(上)

文章目录 前言一、网络安全的趋势二、网络安全背景(一)整体形势对网络安全防护提出新挑战(二)发展对网络安全防护提出新目标 三、网络安全现状分析(一)国外网络安全现状分析(二)国内…

短视频实景直播源码+短视频矩阵+多平台分发技术搭建

建立一个短视频实景直播平台,需要以下几个关键组成部分: 短视频实景直播源码:需要开发或购买适用于短视频实景直播的源码。这个源码可以包括实时视频流的采集和传输、直播界面的展示、弹幕功能、礼物打赏等特色功能。可以使用常见的开发框架如…

【教程】代码混淆详解

【教程】代码混淆详解 本文将对代码混淆进行详细解释,并介绍ProGuard代码混淆器以及Ipa Guard工具的使用方法。首先,我们将了解代码混淆的概念和作用,然后深入讨论ProGuard混淆文件的参数设置以及代码混淆的方法。接着,我们将介绍…