1 简介
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
常见的虚拟机
-
SUN Classic VM: 第一款商用java虚拟机,1996年1月jdk1.0中带的java虚拟机,只能使用纯解释器的方式来执行java代码
-
Exact VM:准确式内存管理,编译器和解释器混合工作以及两级即时编译 ,只在Solaris平台发布
-
HotSport VM: 即时编译,节约了时间和存储,称霸武林。也是目前JDK8.0的默认虚拟机。
-
KVM:简单,轻量,高可以执行,主要在手机平台使用
-
JRockit:BEA,世界上最快的java虚拟机,专注服务端应用,oracle收购BEA后,JRockit基本上已经死
-
j9:IBM Technology for java virtual Machines IT4J
-
dalvik:不能直接指向class文件,寄存器架构,执行dex文件,由class文件转化而来
-
MicrosoftJvm:只能在windows平台运行
JVM 内存模型共分为5个区:
- 堆(Heap)
- 方法区(Method Area)
- 程序计数器(Program Counter Register)
- 虚拟机栈(VM Stack)
- 本地方法栈(Native Method Stack)
JVM(hotspot)结构概览如下图所示:
- 灰色部分(Java栈,本地方法栈和程序计数器)是线程私有,不存在线程安全问题,橙色部分(方法区和堆)为线程共享区。
2 类加载器
类加载器将class文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时数据结构。
ClassLoader只负责class文件的加载,至于它是否可以运行,则由执行引擎Execution Engine决定
类加载器分类
**