zoukankan      html  css  js  c++  java
  • Java的运行机制

    Java语言属于高级语言,它既有解释型语言的特征,又有编译型语言的特征。我们需要先编译Java程序,然后再解释Java程序。编制完之后,Java会产生一个字节码文件(.class文件),然后再进行解释。

    高级语言分为两种,一种是解释性语言,一种是编译型语言

    一、编译型语言

      编译型语言指有专门的编译工具、针对指定的平台/操作系统,将某种高级语言的源代码一次性“翻译”成该平台硬件执行的机器码(包括机器指令和操作数),然后再包装成该平台所能识别的可执行性程序的格式,这个转换过程称为编译(compile)。编译后会生成一个可以脱离开发环境的可执行性程序,可以在很多平台上独立运行。

      有些程序编译结束后,还可能需要对其他编译好的目标代码进行连接,也是就是组装两个以上的目标代码模块生成最终的可执行程序,通过这种方式实现低层次的代码复用。

      因为编译型语言是一次性地编译成机器码,所有可以脱离开发环境独立运行,而且通常运行效率较高;但是因为编译型语言的程序被编译成特定平台的机器码,因此编译生成的可执行程序通常无法移植到其他平台运行;如果需要移植,则必须将源代码复制到特定平台上,针对特定操作系统进行修改。编译型语言的代表有C、C++等,可移植性比较差。

    二、解释型语言

      解释型语言是专门的解释器对源代码进行解释成特定操作系统的机器码,并立即执行的语言,解释型语言一般不会进行整体性的编译和链接处理,解释型语言相当于 把编译型语言中的编译和解释过程混合在一起同时完成。所以,解释型语言的程序运行效率较低,而且不能脱离解释器独立运行。但是,解释型语言有一个优势,那就是跨平台比较容易,也就是可移植性比较强,只需要提供特定平台的解释器就可以了。每个特定的平台解释器将源程序解释成特定平台的机器指令即可。解释型语言的代表有Ruby、Python等都属于解释型语言

    三、Java的运行机制

      上面两点分别介绍了编译型语言和解释型语言的原理和区别点,Java语言比较特殊,Java语言编写的程序,必须先进行编译,但是它不像编译型语言那样编译出机器码,而是生成一种和平台无关的的字节码文件,就是我们常说的.class文件,这种字节码文件是不能直接执行的,必须需要相应的Java解释器来执行,这一点又和解释型语言很像。所以,Java既有编译型语言的特征,也有解释型语言的特征。

      Java中,解释字节码文件的Java解释器就是JVM,即Java虚拟机(Java virtual machine)。所有平台的JVM向编译器提供相同的编程接口,而编译器只需要面向虚拟机,生成虚拟机能够理解的代码,然后由虚拟机来解释执行。在一些虚拟机的实现中,还会将虚拟机代码转化成特定系统的机器码执行,从而提高执行的效率。

      当使用Java编译器进行编译Java程序的时候,会生成与平台无关的字节码文件,这个字节码文件不面向任何操作系统,它只面向JVM。不同平台的JVM不同,但是对于字节码,JVM都提供了相同的接口。然后由不同的JVM进行“解释”成不同平台的机器码。由此看来,JVM是Java程序能够跨平台的关键因素,只要为不同平台提供不同的JVM,就可以产生不同平台能读懂的机器码。

    感谢《Java开发从入门到精通》扶松柏、陈小玉编著 这本书籍中的介绍。收益匪浅,以前只知道Java在编译中产生字节码文件,具体的Java运行机制不是很懂,感谢这本书中的详细介绍!

  • 相关阅读:
    原型1
    可参考的gulp资源
    手机端rem自适应布局实例
    页面变灰效果
    图片上传
    angular学习笔记
    远程页面调试
    drag
    真的了解JS么?
    发现意外之美
  • 原文地址:https://www.cnblogs.com/starstarstar/p/7591049.html
Copyright © 2011-2022 走看看