JVM(1)
JVM
(1)基本概念:
JVM是可运行Java代码 的假想计算机,包含一套字节码指令集,一组寄存器,一个栈,一个垃圾回收,堆和一个存储方法域。JVM是运行在操作系统之上的,它与硬件没有直间的交互。
(2)运行过程:
我们都知道Java源文件,通过编译器,能够产生相应的.Class文件,也就是字节码文件,、
而字节码文件又通过java虚拟机中的解释器,编译成特定机器上的机器码。
也就是如下:
1.java源文件 ----> 编译器------>字节码文件
2.字节码文件—>JVM------>机器码
每一种平台的解释器是不同的,但是实现的虚拟机是相同的,这也就是Java为什么能够跨平台的原因了,当一个程序从开始运行,这是虚拟机就开始实例化了,多个程序启动就会存在多个虚拟机实例。程序退出或者关闭,则虚拟机实例消亡,多个虚拟机实例之间数据不能共享.
(3)三种JVM
1.Sun公司的HotSpot;
2.BEA公司的JRockit;
3.IBM公司的J9 JVM;
在jdk1.7及其以前我们所使用的都是Sun公司的HotSpot,但由于Sun公司和BEA公司被oracle收购,jdk1.8将采用Sun公司的HotSpot和BEA公司的JRockit两个JVM中精华形成jdk1.8的JVM。
3.JVM的体系结构
(1)Class Loader类加载器
负责加载.class文件,class文件在文件开头有特定的文件标示,并且ClassLoader负责class文件的加载等,至于它是否可以运行,则由Execution
Engine决定。
1.定位和导入二进制class文件
2.验证导入类的正确性
3.为类分配初始化内存
4.帮助解析符号引用
(2)Native Interface本地接口
本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C++程序,java诞生的时候C/C++横行的时候,要想立足,必须有调用C/C++程序,于是就在内存中专门开辟了一块区域处理标记为native的代码,它的具体作法是Native Method Stack中登记native方法,在Execution Engine执行加载native libraies。
目前该方法使用的越来越少了,除非是硬件有关的应用,比如通过Java程序驱动打印机,或者Java系统管理生产设备,在企业级应用中已经比较少见。
因为现在的异构领域间的通信很发达,比如可以使用Socket通信,也可以使用Web Service等。
(3)Execution Engine执行引擎,执行包在装载类的方法中的指令,也就是方法。
(4)Runtime data area运行数据区:
虚拟机内存或者Jvm内存,冲整个计算机内存中开辟一块内存存储Jvm需要用到的对象,变量等,运行区数据有分很多小区,分别是:方法区,虚拟机栈,本地方法栈,堆,程序计数器.