JVM01_简介

在这里插入图片描述
文档下载
https://docs.oracle.com/javase/specs/index.html
两个文档:语言规范和虚拟机规范
在这里插入图片描述
参考书
在这里插入图片描述
周志明老师的书推荐
在这里插入图片描述
JVM:跨语言的平台。
java:跨平台的语言
JVM不仅可以解释java程序,其他编程语言也可以解释,只需要不同语言提供各自的编译器,编译出的字节码文件遵循JVM的规范,就可以运行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从JDK11开始,每次都会发布两个版本的JDK:一个OpenJDK、一个OracleJDK
OpenJDK支持期只有半年,半年以后如果发现JDK存在BUG, 那么只能升级JDK,没人维护
OracleJDK持续更新三年,但是如果商用化需要付费
openJDK, Hotspot虚拟机作为默认虚拟机
在这里插入图片描述

虚拟机

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

JVM的位置

在这里插入图片描述

JVM整体结构

在这里插入图片描述
方法区和栈是多线程共享的,java栈、本地方法栈和PC寄存器是每个线程独享的

执行引擎来把字节码翻译成汇编语言-》机器语言,进而成为机器指令
在这里插入图片描述

Java代码执行流程

在这里插入图片描述
在这里插入图片描述
二次编译:
首先java源码经过java编译器,也叫前端编译器,编译成字节码文件
然后字节码文件要经过JIT编译器编译,将字节码命令编译得到机器指令,同时机器指令是反复执行的热点代码
所以要进行缓存,放于方法区,方便直接调用,

JVM的结构模型

零地址指令:只有操作数,没有地址
一地址指令:一个地址,一个操作数
二地址指令:两个地址,一个操作数
以此类推

在这里插入图片描述
基于栈式的指令集,指令集小,但是因为是8位的指令,所以指令多。
基于寄存器的指令集,指令是16位的,很少的指令就能完成一项操作。但是对硬件依赖性强。

反编译操作

编译java文件后,在out文件夹下产生字节码文件
在这里插入图片描述
javap进行反编译
在这里插入图片描述
JVM是基于栈的指令集架构,编译需要8行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
为什么不考虑把虚拟机架构改为基于寄存器呢?还是考虑到基于栈式的优点更多一点:指令集小等

JVM的生命周期

在这里插入图片描述
在这里插入图片描述

JVM发展历程

1、
在这里插入图片描述

开始的JVM执行引擎中只有解释器逐行执行,没有JIT编译器,所以速度慢,大家形成了java速度慢的印象,其实到现在来说,优化的速度已不亚于C和C++
JIT如果发现是热点代码,就会先编译成机器指令缓存起来,提升执行效率
解释器响应时间快,但是执行速度慢。而JIT有一个编译的过程,所以响应慢,但是执行速度快。
解释器和JIT还不能同时执行,所以优化的方法就是两者交替执行,由此达到最佳执行状态。
主流的虚拟机都提供解释器和即时编译器
总结:解释器响应快,但是执行慢,JIT即时编译器开始会有编译成机器指令的步骤,所以响应慢,但是执行快,当执行一段代码后又必须编译机器指令,又进入等待。

也就是说,hotspot里除了内置了classicVM,还有一个JIT.
2、
在这里插入图片描述

3、HotSpot VM

面试的时候如果面试官没提说哪个虚拟机,默认指的就是HotSpot

在这里插入图片描述

4、JRockit

没有解释器,只有编译器,所以执行速度快,启动速度慢
在这里插入图片描述

J9

在这里插入图片描述
三大商用虚拟机:Hotspot\JRockit\J9

taobaoJVM
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值