JVM 学习笔记一

一、JVM 历史:

1、Sun Classic VM (虚拟机始祖 )

JDK1.0版本 - 1.2版本,1.3版本作为备用的虚拟机,1.4版本淘汰。

特点:只能使用纯解释器的方式来执行Java代码,使用JIT编译器就要使用外挂。

tips:执行代码可分为编译执行和解释执行解释执行指的是边解释边运行代码。编译执行指的是先编译,后执行。

2、Sun Exact VM

JDK1.2版本发布,解决Classic VM遇到的问题:解释器和编译器无法同时工作的问题;还具有一些现在高性能处理器的特性。

一直没有真正大规模使用。

3、Sun HotSpot VM

JDK1.3版本发布--至今,现在JDK使用的就是这款。

4、其他

BEA JRockit

IBM J9 VM

 

二、什么是虚拟机

Java虚拟机就是一个字节码翻译器,将字节码文件翻译成各个系统对应的机器码,确保字节码文件能在各个系统正确运行。

 

三、源代码到字节码的过程

1、编译器

 

2、前端编译器(源代码到字节码)

javac编译器处理过程:

a、词法、语法分析(就是这个阶段JVM要搞懂源代码是要干嘛的);

b、填充符号表(类之间会互相引用的,在编译阶段,无法确定其具体的地址,会使用一个符号来替代,等到类加载阶段,JVM会把符号替换成具体的内存地址);

c、注解处理(根据注解的作用将其还原成具体的指令集);

d、分析与字节码生成(生成 .class文件)。

 

3、JIT编译器(字节码到机器码)

运行字节码有两种方式:

使用Java解释器解释执行字节码(启动速度快,边解释边执行);

使用JIT编译器将字节码转换成本地机器码(启动速度慢,运行效率高)。

通常是两种相结合的方式进行Java代码的编译执行。

 

HotSpot虚拟机内置两种即时编译器:

编译器 :Client Compiler 编译模式 :C1

编译器:Server Compiler 编译模式:C2

 

 

4、AOT编译器(源代码到机器码)

基本思想:在程序执行前生成Java方法的本地代码,以便程序运行时直接使用本地代码。

AOT编译器的存在是JVM牺牲质量换取性能的一种策略。

 

编译速度:解释执行 > AOT编译器 > JIT编译器

编译质量:JIT编译器 > AOT编译器 > 解释执行

JVM中通过这几种不同方式的配合,使得JVM的编译质量和运行速度达到最有的状态。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值