(转载)jvm

来源:互联网 发布:淘宝极有家有假货么 编辑:程序博客网 时间:2024/05/16 12:07
一:什么是jvm
Jvm是一种用于计算机设备的规范,他是一个虚构出来的计算机,是通过在实际的计算机仿真模拟各种计算机功能来实现的。
 Java语言的一个非常重要的特点就是与平台的无关性,而使用java虚拟机是实现这一特点的关键。一般语言要在不通的平台上运行,至少需要编译成不同的目标代码,而引入java语言虚拟机后,java语言在不通平台上运行时不需要重新编译,java语言使用java虚拟机屏蔽了与具体平台相关的信息,使得java语言编译程序的时候只需生成在java虚拟机上运行的目标代码,就可以在多重平台上不加修改的运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java能够“一次编译,多出运行”的原因。
来看一下视图解释:
 从上图能清晰看到Java平台包含的各个逻辑模块,也能了解到JDK与JRE的区别,对于JVM自身的物理结构,我们可以从下图鸟瞰一下:
 
二、JAVA代码编译和执行过程
Java代码编译是由Java源码编译器来完成,流程图如下所示:
 
Java字节码的执行是由JVM执行引擎来完成,流程图如下所示:
 
 
Java代码编译和执行的整个过程包含了以下三种重要的机制:
(1)Java源码编译机制
(2)类加载机制
(3)类执行机制
Java源码编译机制
Java源码编译由以下三个过程组成
(1)分析和输入到符号表
(2)注解处理
(3)语义分析和生成class文件
流程图如下所示:
 
最后生成的class文件由以下部分组成:
结构信息。包括class文件格式版本号以哥部分的数量与大小的信息
元数据。对应Java源码中声明与常量的信息。包含类/继承的超类/实现的接口的声明信息、域与方法声明信息和常量池
方法信息:。。对应Java源码中语句和表达式对应的信息。包含字节码、异常处理器表,求只栈与局部变量区大小,求值栈的类型记录,调试符号信息。
类加载机制
Jvm的类加载是通过classloder以及其子类来完成的,类的层次关系和加载顺序可以由下图来描述: