【jvm系列-01】初识虚拟机与java虚拟机
创始人
2025-05-28 04:18:26
0

初识虚拟机与java虚拟机

  • 一,虚拟机与java虚拟机
    • 1,虚拟机
    • 2,java虚拟机
    • 3,jvm整体结构图
    • 4,jvm的架构模型
    • 5,jvm的生命周期
    • 6,jvm的种类划分
      • 6.1,Sun Classic Vm
      • 6.2,Exact VM
      • 6.3,HotSpot虚拟机
      • 6.4,JRockit虚拟机

一,虚拟机与java虚拟机

1,虚拟机

所谓虚拟机(Virtual Machine),就是一台虚拟的计算机。他是一款软件,用来执行一系列虚拟的计算机指令。虚拟机大概可以分为系统虚拟机程序虚拟机

  • Visual Box、VMware就属于系统虚拟机,他们完全是对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台。

  • 程序虚拟机的典型代表就是java虚拟机,它专门为执行单个计算机程序而设计,在java虚拟机中执行的指令被 称为Java字节码指令。

2,java虚拟机

在这里插入图片描述

主要是用来执行java字节码的虚拟机计算机,拥有独立的运行机制,其运行的java字节码也不一定只能由java语言编译而成,其他语言只要遵循该虚拟机中的规范,也可以通过解析这些字节码文件来编译。

JVM平台的各种语言可以共享Java虚拟机带来的跨平台性,优秀的垃圾回收器,以及可靠的即时编译器。Java技术的核心就是Java虚拟机,名称为Java Virtual Machine,简称JVM。所有的Java程序都运行在Java虚拟机的内部。

java虚拟机的作用

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

Java虚拟机的特点

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

3,jvm整体结构图

上面说到java虚拟机的简称就是jvm,而这个HotSpot VM 是目前市面上高性能虚拟机的代表作之一,它主要是采用即时编译器和解释器保存的架构来实现,其整体的结构图如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aP81TW8U-1678841200349)(img/1677429350694.png)]

把这幅图从上往下看,可以分为三层:

  • 第一层就是最上面这层,就是一些Class files,就是一些二进制的字节码文件,然后需要通过一个Class的类加载器进行一个文件的加载,将这些二进制文件加入到内存当中;

  • 第二层就是运行时数据区,就是通过这个类加载器加载进来的内存区域,里面主要有一些堆栈,方法区,程序计数器等等,并且在改层中,方法区和堆是属于公共区域,是线程共享的,而其他的栈和程序计数器,都是每个线程私有的;

  • 第三层就是这个执行引擎,主要有一些即时编译器,解释器和垃圾回收器。

4,jvm的架构模型

Java编译器输入的指令流主要有两种,一种是基于栈的指令集架构,另一种是基于寄存器的指令集架构。

基于栈架构的特点

  • 设计和实现更简单,适用于资源受限的系统,比如说嵌入式设备等
  • 避开了寄存器的分配难题,而是直接使用零地址指令方式分配,即不需要分配地址,直接操作值即可
  • 由于大部分执行过程时依赖栈,因此大部分是使用零地址指令,其指令集更小,易编译
  • 由于在栈中操作,不依赖硬件,可以直接在内存中操作,其可移植性好,可以更好的实现跨平台操作

基于寄存器架构的特点

  • 性能更加优秀,执行的效率更高,可以直接在高速缓存区中工作
  • 都是需要依赖于硬件,因此其可移植性差
  • 相对于基于栈操作,寄存器会花费更少的指令去完成一项工作
  • 寄存器架构指令往往是一,二,三地址指令,一级指令的含义就是存在一个地址和一个操作,二级指令就是两个地址和两个操作值,以此类推。

架构模型总结

为了解决java的跨平台性问题,Java指令是根据这个栈指令集来进行设计的。不同平台的CPU架构不同,所以不能设计为基于寄存器的。

相对而言,栈指令集的跨平台性会更好,并且其指令集小,但是其指令会更多,其性能相较于这个寄存器会更差。

5,jvm的生命周期

jvm的生命周期主要有启动,执行和停止三个部分组成。

虚拟机的启动

在java的官方规范中,Java虚拟机的启动是通过引导类的类加载器来创建初始类的,这个类是由虚拟机的具体指定实现的,即不同商家的虚拟机所决定。

虚拟机的执行

java虚拟机的主要任务就是执行java程序。在程序开始时java虚拟机就开始运行,程序结束时java虚拟机就停止。在执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做java虚拟机的进程。

虚拟机的退出

程序正常执行结束,或者遇到异常,或者操作系统出现错误这些都会让程序结束,除了这些之外,在调用Runtime或者System系统类的时候也会让这个虚拟机退出。除此之外,在使用JNI加载或者卸载java虚拟机的时候,java虚拟机也会出现退出的情况。

6,jvm的种类划分

6.1,Sun Classic Vm

在1996java1.0版本的时候,Sun公司发布了一款名为Sun Classic VM的Java虚拟机,他同时也是第一款商用的Java虚拟机,在JDK1.4版本的时候正式被淘汰。

在这款虚拟机中,只提供解释器而没有即时编译器,如果使用这种JIT即时编译器,就需要外挂,但是在使用这个即时编译器的时候,这个解释器就不能工作,从而解释器和这个编译器就不能协同的工作,因此这个款虚拟机被淘汰。

在这里插入图片描述

解释器和这个JIT即使编译器都可以认作是一个翻译器,并且在当今流行的HotSpot虚拟机中,这两种方式是一起协同工作的。解释器就是正常用来解释字节指令的机器,而这个即时编译器有着缓存热代码的作用,可以提升工作效率。

这两者最大的区别就是:解释器响应快,但是执行效率较低,就相当于步行,但是可以一直不停;而即时编译器是需要通过编译成机器指令的,因此需要一段时间就行等待,但是一旦编译通过,那么其执行效率就很高,相当于火车。这两种是通过合作的方式共存的,当JIT即使编译器处于这个等待的状态,那么就通过解释器来执行,反之则使用这个JIT即时编译器来执行。

6.2,Exact VM

为了解决解释器和即时编译器不能共用的问题,在jdk1.2的时候,Sum提供了这个Exact VM ,准确式内存管理,虚拟机可以知道内存中的某个位置的数据具体是什么类型。但是只在Solaris平台短暂使用,在其他平台还是使用的classic Vm

6.3,HotSpot虚拟机

现在主流的还是该款虚拟机,不管是目前比较火的Oracle JDK还是OpenJdk,HotSpot都是里面的默认的虚拟机。像这个方法区的概念,就是这个虚拟机独有的。

6.4,JRockit虚拟机

主要是注重于服务端的应用,他可以不用关注程序的启动速度,因此JRockit内部不包含解释器,全部代码都靠及时编译器来完成。据研究显示,该款虚拟机是全世界最快的虚拟机。

相关内容

热门资讯

原创 这... 标题:这才是水煮鱼的正宗做法,麻辣爽口,两个人吃了一锅米饭。 在四川的大街小巷,水煮鱼以其独特的麻...
秋燥让人肺难受,3种家常食材来... 亲爱的宝子们!大家好,我是开心! 秋天一到,空气里的燥意就越来越明显。早上起来总觉得喉咙干干的,稍微...
原创 鱼... 在探索美食的旅途中,我们总能找到那些令人眼前一亮的创新之作。今天,我要与大家分享一道别具一格的家常菜...
原创 鸡... 在探索美食的旅途中,鸡蛋以其丰富的营养价值和多样的烹饪方式,成为了餐桌上的常客。然而,传统的吃法往往...
原创 青... 标题:青椒别再炒了,教你这样做,吃一次想两次,打嗝都带香气。 在众多蔬菜中,青椒以其独特的辛辣味和...
原创 这... 在探索美食的旅途中,有一种绝配,它的味道鲜美得让人难以抗拒,那就是——海鲜与红酒。这不仅仅是一场味蕾...
原创 这... 标题:家常美味,简单易做,满足全家人的味蕾 在忙碌的生活中,我们总是渴望一顿温馨而满足的晚餐。今天...
原创 银... 标题:银川最美的私房火锅,情侣约会必去! 在银川这座古城中,有一家私房火锅店以其独特的魅力吸引着无...
原创 这... 标题:这道营养美味的粥,最适合那些不爱吃蔬菜的宝宝,不妨来试试! 在孩子的成长过程中,饮食是至关重...
邀您打卡!坭兴陶与汝瓷共赴“千... 9月17日至21日中国-东盟博览会期间,我市与平顶山市将在南宁国际会展中心联合举办“汝瓷与坭兴陶千年...
好吃不长胖的清汤面做法,孩子都... 好吃不长胖的清汤面的做法,孩子都想吃两碗,清爽不油腻,太香太过瘾了! 清汤面的用料 鸡蛋1个 / ...
这个麻烦的小东西,你乐意再做一... 偶尔也会想做一次马卡龙。 虽然马卡龙似乎只红火过一阵,现在提起来同学们似乎有很多话要说——究其原因,...
原创 5... 标题:5道家常菜做法,这样做,让你食欲大开,看看有没有你喜欢的! 在这个快节奏的时代,我们总是在寻...
原创 这... 标题:这些水果放冰箱里冻一冻,比冰淇淋还好吃,赶快试一试吧。 在炎炎夏日,我们总是渴望着一丝清凉,...
原创 鲜... 标题:鲜椰布丁在家也能做,口感弹软,椰香浓郁,原生态的自然口味! 在忙碌的都市生活中,我们总是渴望...
原创 西... 标题:西红柿炒鸡蛋这样做,鸡蛋鲜嫩更好吃,掌握方法能用一辈子 在厨房的烟火气中,西红柿炒鸡蛋是一道...
原创 韭... 韭菜鸡蛋包饺子,馅多了怎么办?这样做更好吃。 在制作韭菜鸡蛋包饺子时,我们常常会遇到一个问题:如果...
原创 豆... 标题:豆腐这样做最美味,不蒸不炒也不煮,一分钟上桌,每次都吃个精光。 在美食的世界里,有一种食材,...
原创 饭... 标题:饭馆都不敢这样做的菜,婆婆可是真豪啊!以后不吃虾,跟着婆婆混。 在美食的世界里,有一种菜肴,...
“重庆有一种魅力一直很吸引我”... 9月14日上午,重庆图书馆二楼学术报告厅内读者云集,中央广播电视总台播音指导、著名电视节目主持人敬一...