JVM简介
Java虚拟机是一台执行java字节码的虚拟计算机,它拥有独立的运行机制,它运行的java字节码,也未必是java语言编译而成。
它负责加载字节码到其内部,解释/编译成对应平台上的机器指令,每一条java指令,Java虚拟机规范中都有详细的定义,比如:如何取操作数,
如何处理操作数,处理结果放在哪里等等。
Java是跨平台的语言,虚拟机是跨语言的平台
- 一次编译,到处运行
- 自动内存管理
- 自动垃圾回收
1.1 jvm位置
jvm是运行再操作系统之上的,不会直接与硬件层面有交互。
1.2jvm的整体结构
HotSpot 虚拟机时目前市面上高性能虚拟机的代表作之一(基于栈的指令集架构模式),它采用解释器和即时编译器并存的架构,性能,已经达到了和C/C++基本无差距的地步。
基于栈的指令集特点:
设计和实现更简单
适用于资源受限的系统 避开了寄存器的分配难题,使用零地址指令的方式分配,
指令集更小(但是指令会更多) 编译器容易实现
不需要硬件支持,可移植性更好,更好的实现了跨平台
基于寄存器的指令集特点:
典型的x86的二进制指令集,比如传统的pc或者是Davlik虚拟机
指令集架构完全依赖硬件,可移植性比较差
指令集基本都是一地址指令,二地址指令,三地址指令等
完成一项操作的指令更少
性能更优秀,执行效率更高
总结:
由于跨平台性的设计,java的指令都是基于栈来设计的,优点是跨平台,指令集小,编译容易实现,缺点是性能下降,实现同样的功能需要更多的指令。
1.3jvm的生命周期
1:启动
java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的
2:执行
一个运行的虚拟机有一个清晰的任务:执行java程序
程序执行的时候开始运行,程序结束就结束
执行java程序的过程,真正在执行的是一个叫做java虚拟机的进程
3:退出
如下几种情况:
程序正常执行结束
程序执行过程中遇到异常或者错误而终止
由于操作系统出现错误导致java虚拟机进程终止
某线程调用Runtime类或者是System的exit方法等等
1.4不同厂商的虚拟机
有很多,大概了解下:比如最早sun公司的Classic,IBM的J9,以及JRockit,后续主流的还是以Hotspot为主要切入点