- 1 Class Loader类加载器
负责加载class文件,class文件在文件开头有特定的文件标示,并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定 - 2 Native Interface
本地接口的作用是融合不同的编程语言为 Java 所用,它的初衷是融合 C/C++程序,Java 诞生的时候是 C/C++横行的时候,要想立足,必须能调用 C/C++程序,于是就在内存中专门开辟了一块区域处理标记为 native的代码,它的具体做法是 Native Method Stack中登记 native方法,在Execution Engine 执行时加载native libraries。
目前该方法使用的越来越少了,除非是与硬件有关的应用,比如通过 Java程序驱动打印机,或者 Java系统管理生产设备,在企业级应用中已经比较少见。
因为现在的异构领域间的通信很发达,比如可以使用 Socket 通信,也可以使用 Web Service等等,不多做介绍。 (WebService:与平台无关,与语言无关的异构系统之间的通信与互访的调用。) - 3 Method Area 方法区
方法区是被所有线程共享,所有字段和方法字节码,以及一些特殊方法如构造器,接口代码也在此定义。简单说,所有定义的方法的信息都保存在该区域,此区属于共享区间。
静态变量+常量+类信息+运行时常量池存在方法区中,实例变量存在堆内存中 - 4 PC Register 程序计数器
每个线程都有一个程序计数器,就是一个指针,指向方法区中的方法字节码(下一个将要执行的指令代码),由执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不记。 - 5 Native Method Stack 本地方法栈
它的具体做法是 Native Method Stack中登记native方法,在Execution Engine 执行时加载native libraries。