【JVM】一、认识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方法)

在这里插入图片描述

相关推荐

  1. <span style='color:red;'>JVM</span>

    JVM

    2023-12-22 06:46:05      39 阅读
  2. <span style='color:red;'>JVM</span>

    JVM

    2023-12-22 06:46:05      39 阅读
  3. <span style='color:red;'>JVM</span>

    JVM

    2023-12-22 06:46:05      19 阅读
  4. JVM

    2023-12-22 06:46:05       10 阅读
  5. JVM

    2023-12-22 06:46:05       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-22 06:46:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-22 06:46:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-22 06:46:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-22 06:46:05       20 阅读

热门阅读

  1. SpringBoot数据校验

    2023-12-22 06:46:05       42 阅读
  2. 使用GBASE南大通用负载均衡连接池

    2023-12-22 06:46:05       32 阅读
  3. FFmpeg实现rtp推流

    2023-12-22 06:46:05       32 阅读
  4. VTK数据结构

    2023-12-22 06:46:05       41 阅读
  5. Qt使用ffmpeg获取视频文件封面图

    2023-12-22 06:46:05       30 阅读
  6. 【WebRTC---源码篇】(二十五)音视频同步

    2023-12-22 06:46:05       46 阅读
  7. JVM笔记

    2023-12-22 06:46:05       45 阅读
  8. kafka与beanstalk的区别

    2023-12-22 06:46:05       36 阅读
  9. 一些CSS的笔记 例子:使input文本框中文字居中:

    2023-12-22 06:46:05       34 阅读