1 JVM简介
JVM 全称是Java Virtual Machine,Java虚拟机,也就是在计算机上再虚拟一个计算机。我们知道计算机的基本构成是:运算器、控制器、存储器、输入和输出设备,那这个 JVM 也是有这成套的元素,运算器是当然是交给硬件 CPU 还处理了,只是为了适应“一次编译,随处运 行”的情况,需要做一个翻译动作,于是就用了 JVM 自己的命令集,这与汇编的命令集有点类似, 每一种汇编命令集针对一个系列的 CPU,比如8086系列的汇编也是可以用在8088上的,但是就不 能跑在 8051 上,而JVM的命令集则是可以到处运行的,因为 JVM 做了翻译,根据不同的 CPU,翻 译成不同的机器语言。
对于做java开发的人员,JVM当中,我们最需要了解其内存的处理。也就是我们写的类、方法、变量、常量如何存在内存中。
我们先把 JVM 这个虚拟机画出来,如下图所示:
整个 JVM分为四部分: Class Loader 类加载器 类加载器的作用是加载类文件到内存,比如编写一个 HelloWord.java程序,然后通过 javac 编译成 class 文件,那怎么才能加载到内存中被执行呢?Class Loader 承担的就是这个责任,那 不可能随便建立一个.class 文件就能被加载的,Class Loader加载的 class文件是有格式要求, 在《JVM Specification》中式这样定义 Class文件的结构:
ClassFile{
u4 magic;
u2 minor_version; u2 major_version; u2 constant_pool_count; cp_info constant_pool[constant_pool_count-1]; u2 access_flags; u2 this_class; u2 super_class; u2 interfaces_count; u2 interfaces[interfaces_count]; u2 fields_count; field_info fields[fields_count]; u2 methods_count; method_info methods[methods_count]; u2 attributes_count; attribute_info attributes[attributes_count]; }需要详细了解的话,可以仔细阅读《JVM Specification》的第四章“The class File Format”, 这里不再详细说明。
友情提示:Class Loader只管加载,只要符合文件结构就加载,至于说能不能运行,则不是 它负责的,那是由 Execution Engine 负责的。
- Execution Engine
执行引擎 执行引擎也叫做解释器(Interpreter),负责解释命令,提交操作系统执行。
- Native Interface
- Runtime data area