JVM 体系与结构

news2024/11/22 16:18:05

目录

一次编译导出运行

JVM不只是虚拟机, 更是一个平台

虚拟机? Java虚拟机? 

JVM在计算机系统中所处的位置

JVM的体系结构

Java代码的执行流程

JVM生命周期


一次编译导出运行

在以前, java是编程语言里面的巨头: 

在tiobe里面的排名如下: 

但是随着大数据以及人工智能的发展, java语言的地位有所下降: 

 

之所以说一次编译到处运行, 就是因为字节码文件, 从编译层面屏蔽掉了各种操作系统提供的不同的系统指令.

对于java代码来说, 我只需要通过前端编译器将其编译成字节码, 只要是安装了对应版本的JVM的系统, 都可以运行这个字节码

通过JVM去适应不同的操作系统, 屏蔽掉不同操作系统的API, 然后JVM就作为底层软硬件和字节码文件的接口.  

虽然在不同的系统上, 需要不同的JVM的实现, 这一定程度上决定了JVM必定有很多中版本去管理, 但是这个对于能让Java语言到处运行的好处是微不足道的 ... 

JVM不只是虚拟机, 更是一个平台

不只是java, , 只是需要不同的编译器而已, 针对不同的语言, 开发出不同的编译器将他们编译成符合JVM规范的字节码(一种二进制文件)文件, 就可以在JVM上面运行...  

例如你在使用Idea的时候, 经常会看到 Kotlin 语言 .. . 

 

 对于JVM来说, 它只关心字节码文件是否符合要求, 是否能正常加载, 至于你怎么来的字节码我不关心, 然后这些编程语言为了能在JVM上运行, 就需要一种编译器能够将他们编译成符合JVM规范的字节码文件, 于是就衍生除了各种编译器. 

例如你经常用的javac

所以说JVM具有语言无关性, 

虚拟机? Java虚拟机? 

虚拟机是一个很广阔的概念, 它包含了Java虚拟机, 

虚拟机是指通过软件来模拟一个具有完整硬件系统功能的, 运行在一个完全隔离的环境中的完整的计算机系统. 

创建虚拟机的时候需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存, 每个虚拟机都有独立的cmos, 硬盘, 和操作系统, 可以像操作实体机一样操作虚拟机. 

Java虚拟机, 是虚拟机的一种, 也就是我们口中说的JVM, 它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能模拟来实现的. JVM通过仿真模拟计算来执行字节码文件.

JVM的特点是: 

  1. 一次编译到处运行
  2. 自动内存管理
  3. 自动垃圾回收

JVM在计算机系统中所处的位置

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

准确来说, JVM通常位于操作系统和Java应用程序之间。它作为一个中介层,将Java字节码转换为操作系统能够理解的机器代码。JVM在计算机系统中执行Java程序时,负责处理内存管理、垃圾回收等任务,确保Java程序可以在不同的硬件和操作系统上运行一致

JVM的体系结构

  1. 通过前端编译器, 将编程语言的文件编译成字节码文件, 也就是Class文件
  2. 将class文件交给类装载器子系统, 将其加载为JVM可以识别的内存结构(JVM内部的数据结构)
  3. 这些数据结构就是下图中的运行时数据区的体现
  4. 然后通过 执行引擎, 逐条解释字节码指令并执行
  5. 如果java代码中调用了来C/C++中的方法, 也就是本地方法接口, 同样会被执行引擎解释执行.

在类加载过程中,字节码验证器确保加载的字节码符合JVM规范,以防止恶意代码破坏虚拟机的运行 

Java代码的执行流程

java代码首先需要经过一系列程序被加载成字节码文件. java代码一般要经过如下几个阶段: 

JVM生命周期

分为三个步骤

  1. 虚拟机启动
  2. 虚拟机执行java代码
  3. 虚拟机退出
    1. 异常退出
    2. 正常退出

虚拟机启动: 

Java虚拟机(JVM)的启动过程是由Java运行时载入并初始化主类(包含main方法的类)来控制的

这里是一个简化的步骤说明:

  • 启动JVM:操作系统执行Java命令,并启动JVM进程
  • 载入主类:JVM的类加载器会加载包含main方法的类
  • 链接:JVM验证类的字节码是否正确,为类变量分配内存,并将类标记为已加载
  • 初始化:如果该类有初始化方法,则执行之
  • 执行main方法:JVM调用main方法,开始执行应用程序的入口点

虚拟机执行: 

也就是执行Java代码, 通过执行引擎来进行解释执行

虚拟机退出: 

  • 程序正常执行结束
  • 程序在执行过程中遇到了异常或错误而异常终止
  • 由于操作系统出现错误而导致Java虚拟机进程终止
  • 某线程调用Runtime类或system类的exit方法,或Runtime类的halt
  • 方法,并且Java安全管理器也允许这次exit或halt操作。
  • 除此之外,INI(Java Native Interface)规范描述了用JNI
  • Invocation API来加载或卸载 Java虛拟机时,Java虚拟机的退出情况。

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

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

相关文章

【南京工业大学主办,JPCS出版】自动化、电气控制系统与设备

🌈2024年自动化、电气控制系统与设备国际学术会议(AECSE 2024)是致力于将“自动化与电气”领域的专家学者、研发者和技术人员汇集一堂的国际盛会。会议将于2024年10月18-20日在中国南京举行。 🌈会议的主旨是为相关领域的从业者及…

算法练习题19——leetcode141环形链表

题目描述 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&a…

利用R语言进行头条主页内容的自动化下载

对于互联网内容的自动化抓取,R语言提供了强大的工具和库来帮助我们实现这一目标。本文将介绍如何使用R语言进行头条主页内容的自动化下载,包括必要的库安装、代理服务器的配置、HTTP请求的发送、内容的解析和保存。 R语言简介 R语言是一种用于统计计算…

vue3开发uniapp转字节小程序注意事项

vue3开发uniapp转字节小程序注意事项 1.provide-inject 跨层通信不支持问题2.不能自定义头部,需要去申请 开发相关地址 1.抖音开放平台 2.开发者平台 项目本身是vue3tsuniapp写的微信小程序,因产品需求要转换成抖音小程序 1.provide-inject 跨层通信不支…

树莓派3B点灯(1)-- 四种方法

先做个简单一丢丢的吧。。。正好最近工作也要用这个。这次直接给够四种方法,给好给满。分别是Python点,用户空间配置GPIO点,设备树配置内核Leds驱动点,自己写驱动点。 用的板子是树莓派3B,GPIO 26口,蓝光L…

Linux环境基础开发工具使用(1)

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 Linux环境基础开发工具使用(1) 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 Linux…

Java实现常见的工厂模式(包含在Springboot中实战开发)

Java实现工厂模式 文章目录 Java实现工厂模式1. 概念2. 工厂模式的三种实现方式2.1 简单工厂模式1.定义产品接口2. 实现具体产品类3. 实现简单工厂类4. 客户端代码5.运行结果 2.2 工厂方法模式1. 定义产品接口2. 实现具体产品类3. 创建工厂接口4. 实现具体工厂类5. 客户端代码6…

Django日志

【图书介绍】《Django 5企业级Web应用开发实战(视频教学版)》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 《Django 5企业级Web应用开发实战(视频教学版)》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) Django 5框…

构建安全畅通的道路网络:EasyCVR视频汇聚平台在道路监控中的创新应用

随着城市化进程的加速和交通流量的不断增加,道路监控已成为确保交通安全、维护社会秩序的重要手段。道路上的监控摄像头多种多样,大致可以分为这几类:交通道路监控、治安监控、路口违章监控,以及车辆测速监控等。基于智慧交通的需…

YoloV8修改分类(Classify)的前处理(记录)

修改原因 yolo自带的分类前处理对于长方形的数据不够友好,存在特征丢失等问题修改后虽然解决了这个问题但是局部特征也会丢失因为会下采样程度多于自带的,总之具体哪种好不同数据应该表现不同我的数据中大量长宽比很大的数据所以尝试修改自带的前处理&a…

怎么做静态码一物一码?批量制作静态码的简单方法

静态二维码是日常很常见的一种二维码类型,一会用来展示文本或者链接跳转等用途使用,比如在很多的物品包装上,扫描二维码就可以查看物品对应的商品编码,就是静态二维码应用的一种。那么静态二维码批量生成的方法是什么样的呢&#…

干货 | Selenium+chrome自动批量下载地理空间数据云影像

1.背景介绍 1.1地理空间数据云 由中国科学院计算机网络信息中心科学数据中心成立的地理空间数据云平台是常见的下载空间数据的平台之一。其提供了较为完善的公开数据,如LANDSAT系列数据,MODIS的标准产品及其合成产品,DEM数据(SR…

客户需求挖掘的三个步骤

本文将介绍客户需求挖掘的三个关键步骤,帮助企业更好地理解客户,并提供个性化的服务。通过分析客户需求,可以更好地满足客户期望,提升客户满意度和忠诚度。 前言 本文将介绍客户需求挖掘的三个关键步骤,帮助企业更好地…

ZooKeeper--分布式协调服务

文章目录 ZooKeeperzk的由来zk解决了什么问题 ZK工作原理ZK数据模型zk功能1.命名服务2.状态同步3.配置中心4.集群管理 zk部署单机启动zk验证zk zk集群集群角色选举过程1.节点角色状态2.选举ID3.具体过程4.心跳机制5.ZAB协议 ZooKeeper 选举示例1.第一轮投票:2.节点收…

Flutter学习之一搭建开发环境

Flutter学习之一:搭建ununtu系统开发环境 一.背景 随着企业发展跟环境的变化,目前大前端开发越来越火,在国内应该是一个趋势;个人的技术栈主要还是在原生安卓开发上;长江后浪推前浪,如果不及时学习新知识&#xff0c…

中文文本分类详解及与机器学习算法对比

一.文本分类 文本分类旨在对文本集按照一定的分类体系或标准进行自动分类标记,属于一种基于分类体系的自动分类。文本分类最早可以追溯到上世纪50年代,那时主要通过专家定义规则来进行文本分类;80年代出现了利用知识工程建立的专家系统&…

首届云原生编程挑战赛总决赛冠军比赛攻略_greydog.队

关联比赛: 首届云原生编程挑战赛【复赛】实现一个 Serverless 计算服务调度系统 一、初赛赛道一(实现一个分布式统计和过滤的链路追踪) 赛题分析 1、数据来源 采集自分布式系统中的多个节点上的调用链数据,每个节点一份数据文件。数据格式…

系统架构师考试学习笔记第四篇——架构设计实践知识(21)安全架构设计理论与实践

本章考点: 第21课时主要学习信息系统中安全架构设计的理论和工作中的实践。根据考试大纲,本课时知识点会涉及案例分析题和论文题(各占25分),而在历年考试中,综合知识选择题目中也有过诸多考查。本课时内容侧重于知识点记忆;,按照以往的出题规律,安全架构设计基础知识…

工具知识 | Linux常用命令

参考 linw7的github《鸟哥的Linux私房菜》 一.文件管理 1.文件查找:find2.文件拷贝:cp3.打包解包:tar 二.文本处理 1.(显示行号)查看文件:nl2.文本查找:grep3.排序:sort4.转换:tr5.切分文本&…

Web 基础——Apache

Event Worker 的升级版、把服务器进程和连接进行分析,基于异步 I/O 模型。 请求过来后进程并不处理请求,而是直接交由其它机制来处理,通过 epoll 机制来通知请求是否完成; 在这个过程中,进程本身一直处于空闲状态&am…