jvm的分类

2020太难了,我前ios同事失业2个多月还没找到工作,面试机会都很少,所以一定要沉淀下技术,jvm其实离我们做Android的很远,但是又很近,因为像热修复或者Java垃圾回收机制,都会用到,但是相对来说Java后台的人是比学的,但是把自己的知识体系扩展点也挺好,

Java从1995到今天已有25年历史了,一门语言25年已经发展很好了,现在jdk版本是13还是14了,但是开发中还是使用jdk8,因为它稳定

jvm虚拟机也经历了很多,肯定是越来越好,指的是性能方面,学习下jvm的发展历程也挺有意思,

 

1:Sun Classic VM

早在1996年Java1.0版本的时候,Sun公司发布了一款名为Sun Classic VM的Java虚拟机,它同时也是世界第一款商用Java虚拟机,JDK1.4时完全被淘汰
这款虚拟机内部只提供解释器
如果使用JIT编译器,就需要进行外挂,但是一旦使用了JIT编译器,JIT就会接管虚拟机的执行系统,解释器就不再工作,解释器和编译器不能配合工作
现在hotspot内置了此虚拟机
 
2:Exact VM
为了解决上一个虚拟机问题,jdk1.2时,sun提供了此虚拟机
Exact Memory Management:准确式内存管理
也可以叫 Non-Conservative/Accurate Memory Managment
虚拟机可以知道内存中某个位置的数据时什么类型
 
具体现代高性能虚拟机的雏形
1:热点探测
2:编译器与解释器混合工作模式
只在Solaris平台短暂使用,其他平台上还是Classic VM,最终还是被Hotspot虚拟机替换
 
Hotspot VM
最初由一家名为“Longview Technologies”的小公司设计
1997年,此公司被sun收购;2009年,sun公司被orcale收购
Jdk1.3时,Hotspot VM成为默认虚拟机
 
目前Hotspot占有绝对的市场地位
不管是现在仍在广泛使用JDK6,还是使用比较多的JDK8中,默认的虚拟机都是Hotspot
Sun/Oracle JDK和 OpenJDK默认虚拟机
名称中的Hotspot指的就是它的热点代码探测技术
1:通过计数器找到最具编译价值代码,触发即时编译或栈上替换
2:通过编译器与解释器协同工作,在最优化的程序相应时间与最佳执行性能中取得平衡
 
BEA的 Rockit
专注服务器端应用
它可以不太关注程序启动速度,因此JRockit内部不包含解释器实现,全部代码都靠即时编译器编译后执行
大量的行业基准测试显示:JRockit JVM是世界上最快的JVM
使用JRockit产品,客户已经体验到了显著的性能提高(一些超过了70%)和硬件成本的减少
优势:
全面的Java运行时解决方案组合
JRockit面向延迟敏感型应用的解决方案JRockit Real Time提供以毫秒或微妙级的JVM相应时间, 适合财务 军事指挥  电信网络的需要
MissionControl 服务套件,它是一组以极低的开销来监控,管理和分析生产环境中的应用程序的工具
2008年 BEA被oracle收购
 
IBM J9
全称:IBM Technology for java virtual Machine 简称IT4J,内部代号:J9
市场定位与HotSpot接近,服务器端,桌面应用,嵌入式等多用途VM
广泛用于IBM的各种Java产品
目前,有影响力的三大商用虚拟机之一,也是号称世界上最快的虚拟机
2017年左右,IBM发布了开源J9 VM,命名为OpenJ9,交给Eclipse基金会管理,也称为Eclipse OpenJ9
 
KVM和CDC/CLDC Hotspot
oracle在Java ME产品线上的二款虚拟机为:CDC/CLDC Hotspot
Implementation
KVM 是CLDC-HI早期产品
目前移动领域地位尴尬,智能手机被ios android瓜分
KVM简单,轻量, 高度可移植,面向更低端的设备上还要维持自己的一片市场
    A:智能遥控器,传感器
    B:老人机,经济欠发达地方的功能手机
所有的虚拟机的原则:一次编译,到处运行
 

Azul VM

前面三大 “高性能java虚拟机” 使用在通用硬件平台上

这里Azul VM和BEA Liquid VM是与特定硬件平台绑定,软硬件配合的专有虚拟机

Azul VM是 Azul System公司在Hotspot基础上进行大量改进,运行于Azul System公司的专有硬件Vega系统上的Java虚拟机

每个Azul VM实例都可以管理至少十个CPU和数百GB内存的硬件资源, 并提供在巨大内存范围内实现可控的GC时间的垃圾收集器,专有硬件优化的线程调度等优秀特性

2010年,Azul System公司开始从硬件转向软件,发布了自己的Zing JVM,可以在通过x86平台上提供接近于Vega系统的特性

 

Liquid VM
高性能Java虚拟机中的战斗机
BEA公司开发的,直接运行在自家Hypervisor系统上
Liquid VM即是现在的JRockit VE(virtual Edition),Liquid VM不需要操作系统的支持,或者说它是自己本身实现了一个专用操作系统的必要功能,如线程调度, 文件系统,网络支持等
随着JRockit 虚拟机终止开发,Liquid VM项目也停止了
 
Apache Harmony
APache也曾今推出过与JDK1.5和JDK1.6兼容的Java运行平台Apache Harmony
它是IBM和Intel联合开发的开源JVM,受到同样开源OpenJDK的压制,Sun坚决不让Harmony获得JCP认证,最终与2011年退役,IBM转而参与OpenJDK
虽然目前并没有Apache Harmony被大规模商用的案例,但是它的类库代码吸纳进了Android SDK
 

 

Microsoft JVM
微软为了在IE3浏览器中支持java Applets,开发了Microsoft JVM
只能在window平台下运行,但确是当时windows下性能最好的javaJVM
1997年,sun以侵犯商标,不正当竞争罪名指控微软成功,赔了sun很多钱,微软在windownsXP sp3中去掉了其VM,现在windows上安装的jdk都是Hotspot

 

Dalvik VM
谷歌开发的,应用于Android系统,并在android2.2提供了JIT,发展迅猛 
Dalvik VM只能称作虚拟机, 而不能称作“java虚拟机”,因为它没有遵循Java虚拟机的规范
不能直接执行Java的class文件
基于寄存器架构,不是jvm的栈架构
执行的是编译后的dex文件,执行效率比较高,它执行的dex文件可以通过class文件转化而来,
Android5.0使用支持提前编译AOT的ART, VM替换成了 Dalvik VM

你可能感兴趣的:(jvm)