【JVM】一、认识JVM

在这里插入图片描述

文章目录

  • 1、虚拟机
  • 2、Java虚拟机
  • 3、JVM的整体结构
  • 4、Java代码的执行流程
  • 5、JVM的分类
  • 6、JVM的生命周期

1、虚拟机

虚拟机,Virtual Machine,一台虚拟的计算机,用来执行虚拟计算机指令。分为:

  • 系统虚拟机:如VMware,是完全对物理计算机的仿真
  • 程序虚拟机:如JVM,专门为执行单个计算机程序而设计,JVM中执行的指令就是Java字节码指令

不论是哪种类型虚拟机,其上面运行的软件或者程序,都被限制于虚拟机所提供的资源之内。

2、Java虚拟机

JVM,即Java虚拟机,一台处理Java字节码文件(解释为二进制文件)的虚拟计算机,Java程序运行在Java虚拟机内部。

在这里插入图片描述


JVM运行在操作系统之上,并没有与计算机的硬件做直接的交互。(因此,不同的操作系统,对应着不同的JVM)

JVM ⇒ JRE ⇒ JDK三者的关系:

在这里插入图片描述

在这里插入图片描述

3、JVM的整体结构

以HotSpot为例:

在这里插入图片描述

以上架构分三层看:(首先javac编译器将xx.java源文件编译为xx.class字节码文件)

  • 最上层由类装载器将字节码文件加载到内存中,生成一个大的class对象
  • 中间层,其中方法区、堆区是所有线程共享,而栈、程序计数器、寄存器是一个线程一个
  • 最下层,执行引擎里包括解释器、JIT即时编译器、GC垃圾回收器

上面结构图再详细:

在这里插入图片描述

4、Java代码的执行流程

Java做为一种跨平台的语言,一次编译,到处运行。即Java源代码被成功编译为.class字节码后,换平台运行,无需再次编译。

在这里插入图片描述

具体流程为:

  • Java源文件x.java被编译器javac.exe(JDK自带)编译成字节码文件x.class
  • 类装载器加载字节码文件到JVM
  • JVM执行引擎中的解释器将字节码文件处理成二进制文件
  • 操作系统执行二进制文件和硬件进行交互
    在这里插入图片描述

PS:Java虚拟机不关心运行在其内部的程序是用的什么语言,只要是遵循其规范编译的字节码文件,就都能运行。

在这里插入图片描述

换言之,不是牛在Java,而是JVM。Java是跨平台的语言 ⇐ JVM是跨语言的平台

5、JVM的分类

  • Sun Classic VM , 1996 + Java1.0 + 只有解释器,没有JIT即时编译器(因此性能较差)
  • Exact VM,Java1.2,准确式内存管理,可直到内存中某个位置的数据具体是什么类型
  • HotSpot VM,JDK1.3时,成为默认的虚拟机
  • JRockit VM,专注于服务器端,不包含解释器
  • IBM的J9,与上面的HotSpot、JRockit是三大商用虚拟机,2017年开源,命名为Open J9
  • KVM和CDC/CLDC Hotspot
  • Microsoft JVM
  • Taobao JVM,阿里

6、JVM的生命周期

STEP1:启动

JVM的启动时通过引导类加载器bootstrap class loader创建一个初始类initial class来完成的,不同的虚拟机,这个类也不同

STEP2:执行

开始执行Java程序时,JVM开始运行,程序执行结束,JVM也就停止了(jsp看JVM进程,会发现其随着程序的结束而结束)

STEP3:退出
  • 程序正常执行结束,JVM退出
  • 程序执行中遇到异常或错误,且一值向上throw到了main方法,main再抛,就到JVM,JVM退出
  • 操作系统出现错误也会可知JVM进程终止,JVM退出
  • 某个线程调用Runtime类或System类的exit方法,或者说是Runtime类的halt方法(底层是native halt0方法)

在这里插入图片描述

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

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

相关文章

Jenkins + gitlab 持续集成和持续部署的学习笔记

1. Jenkins 介绍 软件开发生命周期(SLDC, Software Development Life Cycle):它集合了计划、开发、测试、部署的集合。 软件开发瀑布模型 软件的敏捷开发 1.1 持续集成 持续集成 (Continuous integration 简称 CI): 指的是频繁的将代码集成到主干。 持续集成的流…

vue 简单实现购物车:商品基础信息最终的 html 文件 + 商品计数器的组件处理,实现了购物车;

购物车实现过程: Ⅰ、商品购物车作业需求:1、商品购物车页面示例:2、具体需求: Ⅱ、html 文件的构建:商品购物车.html Ⅲ、组件文件的构建:商品购物车1.js Ⅳ、小结: Ⅰ、商品购物车作业需求&am…

Linux服务器 部署飞书信息发送服务

项目介绍: 飞书信息发送服务是指将飞书信息发送服务部署到一个Linux服务器上。飞书是一款企业级的即时通讯和协作工具,支持发送消息给飞书的功能。通过部署飞书信息发送服务,可以方便内网发送信息给外网飞书。 项目代码结构展示: …

医院影像科PACS系统源码,医学影像系统,支持MPR、CPR、MIP、SSD、VR、VE三维图像处理

PACS系统是医院影像科室中应用的一种系统,主要用于获取、传输、存档和处理医学影像。它通过各种接口,如模拟、DICOM和网络,以数字化的方式将各种医学影像,如核磁共振、CT扫描、超声波等保存起来,并在需要时能够快速调取…

FAT 文件系统模拟设计与实现:C语言程序模拟FAT16

实验描述 利用标准C 语言,模拟实现 FAT 16文件系统,支持 FAT 文件系统格式的模拟磁盘卷及其中的目录与文件的存取操作,包括磁盘卷格式化、创建目录、改变当前目录、重命名目录、显示目录、删除目录、创建空文件、重命名文件、写文件、显示文…

gem5 garnet 拓扑结构之port: NI CPU ROUTER L1 L2

简介 有Crossbar,CrossbarGarnet,Mesh_*,MeshDirCorners_XY,Pt2Pt等拓扑结构,我们主要关注mesh-xy。参考是https://www.gem5.org/documentation/general_docs/ruby/interconnection-network/ MESI TWO LEVEL与 mesh …

ASP.NET Core基础之定时任务(二)-Quartz.NET入门

阅读本文你的收获 了解任务调度框架QuartZ.NET的核心构成学会在ASP.NET Core 中使用QuartZ.NET 在项目的开发过程中,难免会遇见需要后台处理的任务,例如定时发送邮件通知、后台处理耗时的数据处理等,上次分享了ASP.NET Core中实现定时任务的…

STM32G4x FLASH 读写(修改HAL库驱动)

主要工作就是把HAL的超时用LL库延时替代,保留了中断擦写模式、轮询等待擦写,待验证哈。 笔者用的芯片为STM32G473CBT6 128KB Flash,开环环境为CUBEMXMDK5.32,因为G4已经没有标准库了,笔者还是习惯使用标准库的开发方式…

Flink 状态管理与容错机制(CheckPoint SavePoint)的关系

一、什么是状态 无状态计算的例子: 例如一个加法算子,第一次输入235那么以后我多次数据23的时候得到的结果都是5。得出的结论就是,相同的输入都会得到相同的结果,与次数无关。 有状态计算的例子: 访问量的统计&#x…

微信小程序开发系列-01创建一个最小的小程序项目

本文讲述了通过微信开发者工具,创建一个新的小程序项目,完全从零开始,不依赖开发者工具的模板。目的是为了更好的理解小程序工程项目的构成。 文章目录 创建一个空项目app.json全局配置pagessitemapLocation app.js 创建一个空项目 打开微信…

【C语言】指针详解(一)

目录 1.内存和地址 1.1内存 1.2如何理解编址 2.指针变量和地址 2.1取地址操作符(&) 2.2指针变量和解引用操作符(*) 2.2.1指针变量 2.2.2拆解指针类型 2.2.3解引用操作符 2.3指针变量大小 1.内存和地址 1.1内存 在讲内…

大型医院PACS系统源码,影像存储与传输系统源码,支持多种图像处理及三维重建功能

PACS系统是医院影像科室中应用的一种系统,主要用于获取、传输、存档和处理医学影像。它通过各种接口,如模拟、DICOM和网络,以数字化的方式将各种医学影像,如核磁共振、CT扫描、超声波等保存起来,并在需要时能够快速调取…