JVM即Java虚拟机。
先讲讲Java程序的实现,程序员写好Java程序进行编译,编译时会将Java文件编译成Java字节码(class文件),电脑再使用Java虚拟机将这个class文件进行解释成机器码并执行。其中不同操作系统的Java虚拟机不同,如Windows有windows 的Java虚拟机,Linux有Linux的Java虚拟机。
虚拟机的具体实现:
Java代码->编译->Java字节码(class文件)->执行 Java程序->java 根据系统版本找到jvm.cfg文件->再通过jvm.cfg找到相应的jvm.dll(jvm.dll为虚拟机的主要实现)->初始化jvm,并获取JIN接口(JIN为Java的本地接口,帮助查找class文件的硬盘存储位置)->将class文件转载到jvm中->找到mian方法执行。
JVM的基本结构:
JVM中包括了方法区,Java栈,本地方法栈,Java堆,PC寄存器,执行引擎,垃圾收集器,本地方法接口,本地方法库。其中:
方法区是线程共享的区域,存放类信息,常量和静态变量。
Java堆也是线程共享的区域,存放各种类的实例,若堆空间不够,会抛 出OutOfMemoryError异常。
Java栈是各个线程私有的,用于存储执行方法中的数据,每执行一个方法都会压入一个元素,元素中即保存着方法的数据,如局部变量等。
本地方法栈的作用和Java栈相同,但是它的方法是调用本地方法接口来使用本地方法库来与本地的操作系统和硬件沟通。
PC寄存器中存放的就是所有方法的执行顺序,执行引擎会跟随PC寄存器中的顺序进行执行。
垃圾收集器就是用来回收内存的。
Java虚拟机的出现,大大提升了Java代码的可移植性。
有错漏的地方请指出,谢谢。