慢慢琢磨 JVM
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 本地接口
本地接口的作用是融合不同的编程语言为 Java 所用,它的初衷是融合 C/C++程序,Java 诞生
的时候是 C/C++横行的时候,要想立足,必须有一个聪明的、睿智的调用 C/C++程序,于是就在内
存中专门开辟了一块区域处理标记为 native 的代码,它的具体做法是 Native Method Stack 中登
记 native 方法,在 Execution Engine 执行时加载 native libraies。目前该方法使用的是越来越
少了,除非是与硬件有关的应用,比如通过 Java 程序驱动打印机,或者 Java 系统管理生产设备,
在企业级应用中已经比较少见,因为现在的异构领域间的通信很发达,比如可以使用 Socket 通信,
也可以使用 Web Service 等等,不多做介绍。
Runtime data area 运行数据区
运行数据区是整个 JVM 的重点。我们所有写的程序都被加载到这里,之后才开始运行,Java
生态系统如此的繁荣,得益于该区域的优良自治,下一章节详细介绍之。
整个 JVM 框架由加载器加载文件,然后执行器在内存中处理数据,需要与异构系统交互是可以