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.rhkb.cn/news/233862.html

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

相关文章

云解析迁移【腾讯云到阿里云】

一、关闭 DNSSEC 域名如有配置DNSSEC,请先到域名注册商处关闭DNSSEC,等迁移完成后,再参考DNSSEC设置方法进行配置。如域名未配置DNSSEC,则忽略此步骤。 解析数据准备: 请在原DNS服务商处导出解析记录,并按…

眼镜用超声波清洗机洗会有伤害吗?这些超声波清洗机适合清洗眼镜

用超声波清洗机洗眼镜是一种非常好的选择,超声波清洗机通过高频振动,将眼镜上的污渍、灰尘等清洗干净,比手洗更彻底、更高效。然而,有些人担心超声波清洗机会对眼镜造成伤害。实际上,这种担心是多余的。超声波清洗机在…

Java版直播商城:电商源码、小程序、三级分销及 免 费 搭 建 方案

一、技术选型 java开发语言:java是一种跨平台的编程语言,适用于大型企业级应用开发。使用java开发直播商城可以保证系统的稳定性和可扩展性。 spring boot框架:spring boot是一个快速构建spring应用的框架,简化了开发过程&#xf…

SpringBoot集成Camunda

一&#xff1a;pom.xml 因camunda集成SpringBoot对SpringBoot的版本和JDK的版本都有一定的要求&#xff0c;所以这里贴个完整的依赖。可以去官网找每个SpringBoot的版本对应的camunda版本。 <?xml version"1.0" encoding"UTF-8"?> <project x…

一分钟带你了解深度学习算法

深度学习是一种受到生物学启发的机器学习方法&#xff0c;其目标是通过构建多层神经网络来模拟人脑的工作原理。它在过去几十年来取得了巨大的进展&#xff0c;并在图像识别、语音识别、自然语言处理等领域取得了突破性的成果。 深度学习的核心思想是模仿人脑的神经网络。人脑中…

flex弹性盒子常用的布局属性详解

想必大家在开发中经常会用到flex布局。而且还会经常用到 justify-content 属性实现分栏等等 接下来给大家分别讲一下 justify-content 的属性值。 以下是我敲的效果图大家可以清晰看出区别 space-between 属性值可以就是说两端对齐 space-evenly 属性值是每个盒子之间的…

欧洲编程语言四巨头

从左往右&#xff0c;依次是 尼克劳斯沃斯 (Niklaus Wirth)&#xff0c;迪杰斯特拉&#xff08;Edsger Dijkstra&#xff09;&#xff0c;霍尔&#xff08;Tony Hoare&#xff09; 尼克劳斯沃斯 (Niklaus Wirth) 瑞士人&#xff0c;一生发明了8种编程语言&#xff0c;其中最著…

大数据深度学习长短时记忆网络(LSTM):从理论到PyTorch实战演示

文章目录 大数据深度学习长短时记忆网络&#xff08;LSTM&#xff09;&#xff1a;从理论到PyTorch实战演示1. LSTM的背景人工神经网络的进化循环神经网络&#xff08;RNN&#xff09;的局限性LSTM的提出背景 2. LSTM的基础理论2.1 LSTM的数学原理遗忘门&#xff08;Forget Gat…

PHP入门指南:从小白到编程达人

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 文章目录 推荐阅读PHP语法注释变量输出定界符数据类型var_dump() 方法 PHP弱类型弱类型比较内置…

Python自动化办公之PDF拆分

今天我们继续分享真实的自动化办公案例&#xff0c;希望各位 Python 爱好者能够从中得到些许启发&#xff0c;在自己的工作生活中更多的应用 Python&#xff0c;使得工作事半功倍&#xff01; 需求 需要从 PDF 中取出几页并将其保存为新的 PDF&#xff0c;为了后期使用方便&a…

关于车规级齐纳二极管MMBZ5V6ALT1G 它又有什么作用?

MMBZ5V6ALT1G是一款双单片硅齐纳二极管专为需要瞬态过电压保护能力的应用而设计&#xff0c;它们适用于电压和ESD敏感设备&#xff0c;如计算机、打印机、商用机器、通信系统、医疗设备和其他应用。它们的双结共阳极设计仅使用一个封装即可保护两条独立的线路&#xff0c;该器件…

rtu水文专用(支持SL/T427-2021等大部分协议)

SRTU200 系列是一款集数据采集与 4G/NB-IoT、LoRa、GPS 等多种通信功能于一体的 多功能遥测终端机&#xff0c;该设备搭配丰富的采集控制接口&#xff0c;提供 RS232、RS485、以太网、模拟量 输入、开关量输入、开关量输出和继电器等。产品设计人性化&#xff0c;功能丰富&…

Mysql文件-笔记

我们小组技术分享mysql&#xff0c;给我表这块&#xff0c;这个知识呀 只要你想学 源源不断 源源不断&#xff0c;我其实想把我们组的分享都弄出来&#xff0c;偷偷的 嘘~ 表是特定实体的数据集合&#xff0c;关系型数据库模型核心&#xff0c;表逻辑存储和实现&#xff0c;物理…

WPF 导航界面悬浮两行之间的卡片 漂亮的卡片导航界面 WPF漂亮渐变颜色 WPF漂亮导航头界面 UniformGrid漂亮展现

在现代应用程序设计中&#xff0c;一个漂亮的WPF导航界面不仅为用户提供视觉上的享受&#xff0c;更对提升用户体验、增强功能可发现性和应用整体效率起到至关重要的作用。以下是对WPF漂亮导航界面重要性的详尽介绍&#xff1a; 首先&#xff0c;引人入胜的首页界面是用户与软…

电子电器架构网络演化 —— 车载以太网TSN

电子电器架构网络演化 —— 车载以太网TSN 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消…

CSAPP cache lab - Optimizing Matrix Transpose

CSAPP cache lab part B 矩阵转置 矩阵转置是一种操作&#xff0c;它将矩阵的行和列互换位置&#xff0c;即将原始矩阵的行变为转置矩阵的列&#xff0c;将原始矩阵的列变为转置矩阵的行。转置操作可以通过改变矩阵的布局来方便地进行某些计算和分析。 假设有一个mn的矩阵A&…

【uniapp】调用阿里云OCR图片识别文字:

文章目录 一、效果&#xff1a;二、实现&#xff1a; 一、效果&#xff1a; 二、实现&#xff1a; 【阿里官方】高精版OCR文字识别【最新版】-云市场-阿里云 <template><view class"container"><!-- 选择图片 --><button click"imageO…

在win10和Linux上配置SSH 无密码登录

文章目录 一、用途二、在本地机器上使用ssh-keygen产生公钥私钥对1&#xff09;在Linux (或macOS) 上产生SSH公私钥的方法2&#xff09;在win10上产生SSH公私钥的方法a&#xff09;检查windows 本地是否安装有sshb&#xff09;在本地生成SSH密钥对&#xff08;公钥和私钥&#…

2024 年 API 安全:预测和趋势

随着技术以前所未有的速度不断进步&#xff0c;API&#xff08;应用程序编程接口&#xff09;安全性的复杂性也随之增加。随着 API 在现代应用程序和服务中的激增&#xff0c;组织将需要更好地了解其 API 环境以及 API 给运营带来的风险。 到 2024 年&#xff0c;预计几个关键…

基于R语言(SEM)结构方程模型教程

详情点击链接&#xff1a;基于R语言&#xff08;SEM&#xff09;结构方程模型教程 01、R/Rstudio (2)R语言基本操作&#xff0c;包括向量、矩阵、数据框及数据列表等生成和数据提取等 (3)R语言数据文件读取、整理&#xff08;清洗&#xff09;、结果存储等&#xff08;含tidve…