Java编译过程与c/c++编译过程有何不同 |
你对Java编译过程和编译原理,Java编译程序将java源程序编译成jvm可执行代码--java字节码,而且Java编译器却不将对变量和 步骤的 引用编译为数值 引用,也不确定程序执行过程中的内存布局,而是将些符号 引用信息保留在字节码中,由解释器在运行过程中 缔造内存布局, 而后再通过查表来确定一个 步骤所在的地址,这样就有效地 保障了java的可移植性和安全性 。 Java编译原理 1、Java编译过程与c/c++编译过程不同 Java编译程序将java源程序编译成jvm可执行代码--java字节码. c/c++编译过程: 当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而生成的 。 因此在编译过程中,编译程序通过查表将全部对符号的 引用转换为特定的内存偏移量,以 保障程序运行 。 Java编译过程: Java编译器却不将对变量和 步骤的 引用编译为数值 引用,也不确定程序执行过程中的内存布局,而是将些符号 引用信息保留在字节码中,由解释器在运行过程中 缔造内存布局, 而后再通过查表来确定一个 步骤所在的地址,这样就有效地 保障了java的可移植性和安全性 。 2、jvm工作原理 运行jvm字符码的工作是由解释器来 实现的 。解释执行过程分三步进行:代码的装入、代码的校验、和代码的执行 。 装入代码的工作由“类装载器classloader” 实现 。类装载器负责装入运行一个程序需求的全部代码,这也包含程序代码中的类所继承的类和被调 用的类 。当类装载器装入一个类时,该类被放在自己的名字空间中 。除了通过符号 引用自己名字空间以外的类,类中间没有 其余 步骤 可以影响 其余类 。在本台计算机的全部类都在同一地址空间中,而全部从外部引进的类,都有一个自己独立的名字空间 。这使得当地类通过共享 雷同的名字空间 获得较高的运行效率,同时又 保障它们与从外部引进的类不会 彼此影响 。 当装入了运行程序需求的全部类后,解释器便可确定整个可执行程序的内存布局 。解释器为符号 引用与特定的地址空间 构建对应关系及 查问表 。通过在这一阶段确定代码的内布局,java很好地解决了由超类转变而使子类 瓦解的问题,同时也 预防了代码的非法 拜访 。 随后,被装入的代码由字节码校验器进行 审查 。校验器 可以发现操作数栈 好处、非法数据类型转化等多种 舛误 。通过校验后,代码便开始执行了 。 java字节码的执行有两种 模式: 1)即时编译 模式:解释器先将字节编译成机器码, 而后再执行该机器码 。 2)解释执行 模式:解释器通过每次解释并执行一小段代码来 实现java字节码程序的全部操作 。本节对于Java编译的内容介绍到这里,请关注本节 其余 有关报导 。 |