标签:rtu 方法区 进入 eth 适配 载器 系统管理 blog 体系
1.1 Java体系构成
JAVA体系包括四个方面:
JAVA编程语言,编辑的文件为Java源代码,文件格式为(.java);
JAVA类文件格式,编译后文件格式为(.class);
JAVA虚拟机,即通常所说的JVM;
JAVA应用程序接口(Java API)。
这四者的运行关系如下:
(jvm运行字节码文件,如果把php编译为字节码文件,也可以运行 )
(1) Class Loader类加载器
负责加载 .class文件,class文件在文件开头有特定的文件标示,并且ClassLoader负责class文件的加载等,至于它是否可以运行,则由Execution Engine决定。
① 定位和导入二进制class文件
② 验证导入类的正确性
③ 为类分配初始化内存
④ 帮助解析符号引用.
(2) Native Interface本地接口:
本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C++程序,Java诞生的时候C/C++横行的时候,要想立足,必须有调用C/C++程序,于是就在内存中专门开辟了一块区域处理标记为native的代码,它的具体作法是Native Method Stack中登记native方法,在Execution Engine执行时加载native libraies。
目前该方法使用的越来越少了,除非是与硬件有关的应用,比如通过Java程序驱动打印机,或者Java系统管理生产设备,在企业级应用中已经比较少见。
因为现在的异构领域间的通信很发达,比如可以使用Socket通信,也可以使用Web Service等。
(3) Execution Engine 执行引擎:
执行包在装载类的方法中的指令,也就是方法。这里也包括了即时编译器和垃圾收集(GC)。
解释器能快速的解释字节码,但执行却很慢。 解释器的缺点就是,当一个方法被调用多次,每次都需要重新解释。
JIT编译器消除了解释器的缺点。执行引擎利用解释器转换字节码,但如果是重复的代码则使用JIT编译器将全部字节码编译成本机代码。本机代码将直接用于重复的方法调用,这提高了系统的性能。
(4) Runtime data area 运行数据区:
虚拟机内存或者Jvm内存,冲整个计算机内存中开辟一块内存存储Jvm需要用到的对象,变量等,运行区数据有分很多小区,分别为:方法区,虚拟机栈,本地方法栈,堆,程序计数器。
3 示例
上面对虚拟机的各个部分进行了比较详细的说明,下面通过一个具体的例子来分析它的运行过程。
虚拟机通过调用某个指定类的方法main启动,传递给main一个字符串数组参数,使指定的类被装载,同时链接该类所使用的其它的类型,并且初始化它们。例如对于程序:
编译后在命令行模式下键入: java HelloApp run virtual machine
将通过调用HelloApp的方法main来启动java虚拟机,传递给main一个包含三个字符串"run"、"virtual"、"machine"的数组。现在我们略述虚拟机在执行HelloApp时可能采取的步骤。
开始试图执行类HelloApp的main方法,发现该类并没有被装载,也就是说虚拟机当前不包含该类的二进制代表,于是虚拟机使用ClassLoader试图寻找这样的二进制代表。如果这个进程失败,则抛出一个异常。
类被装载后同时在main方法被调用之前,必须对类HelloApp与其它类型进行链接然后初始化。链接包含三个阶段:检验,准备和解析。检验检查被装载的主类的符号和语义,准备则创建类或接口的静态域以及把这些域初始化为标准的默认值,解析负责检查主类对其它类或接口的符号引用,在这一步它是可选的。
类的初始化是对类中声明的静态初始化函数和静态域的初始化构造方法的执行。一个类在初始化之前它的父类必须被初始化。
整个过程如下:
参考:《深入理解java虚拟机》
https://blog.csdn.net/wingsing2010/article/details/81432591
标签:rtu 方法区 进入 eth 适配 载器 系统管理 blog 体系
原文地址:https://www.cnblogs.com/yiyepiaolingruqiu/p/11584766.html