JVM与Java体系结构
一、JVM的重要性
- 面试,大厂必备;
- 中高级程序员的必备:项目管理、调优的需要;
- 极客精神:垃圾回收算法、JIT、底层原理。
Java相较于C/C++自带安全检查、垃圾回收、动态内存分配,入门学习起来相对更简单一些,工作以后必然要面临很多问题,学习JVM还是很有必要的。
二、Java与JVM
-
Java,跨平台的语言:write once,run anywhere。
-
JVM,跨语言的平台:JVM只关注字节码文件,任何语言编写的程序通过编译器变成字节码文件都可以在JVM上运行。
-
Java和JVM没有必然的联系!
-
**虚拟机分两类:**系统虚拟机和程序虚拟机。系统虚拟机是对物理计算机的仿真,例如Visual Box,VMware;程序虚拟机为执行单个计算机程序而设计,例如JVM。
-
JVM整体结构简图
- java代码执行流程
-
指令集架构:
-
基于栈的指令集架构:零地址指令方式分配,指令集更小,不需要硬件支持,可移植性更好,更容易跨平台。典型:JVM。
-
基于寄存器的指令集架构:依赖硬件,性能更好,指令集更大。典型:传统的PC、Android的Davlink虚拟机。
-
指令集的大小深刻影响了执行指令的多少,就像没有学会乘法以前,55*10就是将55累加十次(也可以将10累加55次,更耗费资源),有了乘法以后,执行一次即可,时间复杂度由O(n) --> O(1)。
-
-
JVM的生命周期:启动、执行、退出。
-
一些比较出名的JVM
-
使用最多的三个JVM
-
HotSpot:属于Oracle,平时使用默认的虚拟机,英语即热点代码探测技术,编译器和解释器协同工作,面试中一般没有说明问的都是HotSpot。
-
JRockit:属于Oracle,最快的JVM,没有解释器,只有编译器,一般用在服务器上。
-
J9:属于IBM,号称最快的JVM,因为专门对IBM的硬件做了适配,所以在IBM的硬件上最快,但是不适用于其他硬件(类似苹果的IOS,针对硬件设计的系统)。
-
可以看到,无论是什么样的架构,如果只考虑一个平台,性能都是可以做到非常高的,基于寄存器的指令集架构如是,J9也如是。但是太依赖硬件就像把鸡蛋放到一个篮子里,如果能像苹果一样天时、地利、人和也还好,但大多都会像诺基亚、柯达这样的公司,很容易压错宝。不得不说,Java的成功是源自其跨平台特性,不能做专才,做全才也不失为走向成功的一条康庄大道。
-
-
一些值得了(chui)解(bi)的JVM
- Sun Classic VM:Java 1.0的产物,世界第一款商用JVM,只有解释器,不能和JIT一同运行,HotSpot内置了该虚拟机。
- Exact VM:Java 1.2出现,可以热点探测,可以让编译器和解释器混合工作,然而很快HotSpot出现,该虚拟机便没有用武之地。
- KVM和CDC/CLDC HotSpot:早期用于Java ME产品线上的虚拟机,用于手机上,目前市场基本没有,仅用于老人机、功能机,早年《艾诺迪亚》等游戏就是用java开发的。
- Azul VM:与特定硬件平台绑定、软硬件配合的专有虚拟机,人称“高性能Java虚拟机中的战斗机”。
- Apache Harmony:IBM和Intel联合开发,但是被Sun打压,最后被放弃,但是其Java类库代码被吸纳进了Android SDK,另类的方式存活着。
- Microsoft JVM:只能在windows下运行,被sun告了,后来gg。
- Taobao JVM:阿里基于OpenJDK开发了自己的定制版本AlibabaJDK,是整个阿里Java体系的基石,在阿里产品上性能高,严重依赖intel的cpu。
-
本学习笔记基于宋老师的JVM课程。学习之路道阻且长,共勉。