【jvm系列-01】初识虚拟机与java虚拟机
JVM系列整体栏目
内容 | 链接地址 |
---|---|
【一】初识虚拟机与java虚拟机 | https://blog.csdn.net/zhenghuishengq/article/details/129544460 |
【二】jvm的类加载子系统以及jclasslib的基本使用 | https://blog.csdn.net/zhenghuishengq/article/details/129610963 |
【三】运行时私有区域之虚拟机栈、程序计数器、本地方发栈 | https://blog.csdn.net/zhenghuishengq/article/details/129684076 |
初识虚拟机与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 是目前市面上高性能虚拟机的代表作之一,它主要是采用即时编译器和解释器保存的架构来实现,其整体的结构图如下:
把这幅图从上往下看,可以分为三层:
第一层就是最上面这层,就是一些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内部不包含解释器,全部代码都靠及时编译器来完成。据研究显示,该款虚拟机是全世界最快的虚拟机。
【jvm系列-01】初识虚拟机与java虚拟机相关推荐
- JVM规范系列第2章:Java虚拟机结构
本规范描述的是一种抽象化的虚拟机的行为,而不是任何一种(译者注:包括 Oracle 公司自己的 HotSpot 和 JRockit 虚拟机)被广泛使用的虚拟机实现. 记住:JVM规范是一种高度抽象行为 ...
- 【JVM系列】一步步解析java执行内幕
[JVM系列]一步步解析java执行内幕 对于任何一门语言,要想达到精通的水平,研究它的执行原理(或者叫底层机制)不失为一种良好的方式.在本篇文章中,将重点研究java源代码的执行原理,即从程 序员编 ...
- 虚拟机与Java虚拟机
虚拟机 所谓虚拟机(Virtual Machine),就是一台虚拟的计算机.它是一款软件,用来执行一系列虚拟计算机指令.大体上,虚拟机可以分为系统虚拟机和程序虚拟机. 大名鼎鼎的Visual Box, ...
- Java虚拟机 和 java虚拟机下的进程
一.什么是Java虚拟机 当你谈到Java虚拟机时,你可能是指: 1.抽象的Java虚拟机规范 2.一个具体的Java虚拟机实现 3.一个运行的Java虚拟机实 ...
- 一篇文章了解Java虚拟机,Java虚拟机内存详解
虚拟机介绍 Java虚拟机(JVM)一种用于计算机设备的规范,可用不同的方式(软件或硬件)加以实现.编译虚拟机的指令集与编译微处理器的指令集非常类似.Java虚拟机包括一套字节码指令集.一组寄存器.一 ...
- (一)JVM成神路之初识虚拟机 - 探寻Java虚拟机的前世今生之秘
引言 JVM(Java Virtual Machine)Java虚拟机的概念大家都不陌生,Java之所以可以做到"一次编译,到处运行"的跨平台性,其根本原因就在于JVM.JVM是建 ...
- 深入理解Java虚拟机(JVM高级特性与最佳实践java虚拟机)的一些知识总结
GC在什么时候对什么做了什么? 要回答这个问题,先了解下GC的发展史.jvm运行时数据区的划分.jvm内存分配策略.jvm垃圾收集算法等知识. 先说下jvm运行时数据的划分,粗暴的分可以分为堆区(He ...
- 【Java虚拟机】Java虚拟机深度讲解、VisualVM工具、JVM调优
从控制台看Java版本 HotSpot 它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机. 最初并非由Sun公司开发,而是由一家名为"Longview ...
- jvm学习笔记(1)——java虚拟机内存区域
一.java内存区域: 1.程序计数器(线程私有): 内存中较小的内存空间,可以当做当前线程所执行字节码的行号指示器.如分支.循环.跳转.异常处理.线程恢复都需要依赖这个计数器完成. 2.java虚拟 ...
最新文章
- nf_hook_slow函数
- PTP4L 简化版本OC模式
- 很抱歉,这场大会我们没法卖票给你了
- 数据库安全:不只是DAM
- leetcode 844. 比较含退格的字符串
- selenium java项目_1)selenium+ java集成,待深度项目流程应用
- 【Sublime Text3 】——代码片段
- SAP资产评估组名_SAP软件 财务月结步骤
- Cameralink多功能接口转换模块
- 18 在springboot整合thymeleaf模板引擎中@Controller和@RestController不同注解的跳转页面方法
- wnmp php7,wnmp环境php7与其他php版本共存
- 怎样将pdf文件页面旋转
- vue css 拖拽,vue----拖拽小方块
- WAYS TO UPDATE YOUR DEVICE
- java中lockprocess_java – 使用Processbuilder运行jar无法正常工作
- C语言文件的读入与写入
- 谷歌首提Android11,谷歌首提Android11,即将发布的Pixel 4会搭载?传统强项再突破...
- linux用户权限0666什么意思,linux 权限
- ios 固件更新四种常用方法
- lstrip在python中是什么意思_映月城与电子姬 憋住作用是什么 憋住作用介绍
热门文章
- Race condition--Java Concurrency In Practice C02读书笔记
- Failed to start component异常的解决方案
- 时序数据取样方法_数据科学的抽样方法
- oracle有dba角色用户,ORACLE管理-查看拥有DBA角色的用户
- 基于Java+Springmvc+vue+element实现高校心理健康系统详细设计和实现
- 人造大理石行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- 预测2019浙大计算机考研分数,2019年浙江大学考研复试分数线已出现
- Ubuntu下pip安装CPU版PaddlePaddle
- 输入两个整数,求;两者的和,差,积,商,余数。
- linux环境下登录ORACLE 报ORA-12547: TNS:lost contact错误