Java程序的运行机制

一.高级语言的运行机制

在计算机上执行一个高级语言程序一般要分两步,第一步,用一个编译程序将高级语言程序翻译成机器语言程序;第二步,运行所得的机器语言程序求得计算结果。

计算机高级语言按程序的执行方式分为两种:编译型和解释型。

1.编译型语言

编译型语言是指使用专门的编译器,针对特定平台将某种高级语言源代码一次性编译成可被平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式,这个过程称为编译(Compile)。编译生成的可执行性程序可以脱离开发环境,在特定的平台上运行。有些程序编译结束后,还可能需要对其它编译好的目标代码进行链接,组装两个以上的目标代码模块生成最终的可执行性程序。

编译型语言一次性地编译成机器码,所以可以脱离开发环境独立运行而且通常运行效率较高;因为编译型语言的程序被编译成特定平台上的机器码,因此编译生成的可执行性程序通常不能移植到其他平台上运行。典型的编译型程序语言有C、C++等。

2.解释型语言

解释型语言是指使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行的语言。解释型语言通常不会进行整体的编译链接处理,解释型语言相当于把编译型语言中的编译和解释过程混合到一起同时完成。

解释型语言每次执行程序都要进行一次编译,因此解释型语言的程序运行效率通常比较低,而且不能脱离解释器独立运行。但解释型语言跨平台比较容易,只需提供解释器即可,每个特定平台上的解释器负责将源程序解释成特定平台上的机器指令即可。这种跨平台的优势是以牺牲程序的运行效率为代价的。典型的解释型语言有Ruby、Python等。

二.Java程序的运行机制

Java程序的运行必须经过两个步骤:先编译、后解释。编译(使用javac命令)步骤并不会生成特定平台的机器代码,而是生成一种与平台无关的字节码(*.class文件)。这个生成的字节码不是可执行性的,必须使用Java解释器来解释执行(使用java命令)。因此可以认为Java语言既是编译型语言,也是解释型语言。Java程序运行的步骤如下图所示。

图片发自简书App

三.Java实现跨平台的JVM

JVM(Java Virtual Machine)是Java虚拟机,JVM负责解释执行字节码文件。使用Java编译器编译生成的与平台无关的字节码文件,这些字节码文件不面向任何具体的平台,只面向JVM。不同平台上的JVM都是不同的,但它们都提供了相同的接口,只要为不同平台实现了相应的虚拟机,编译后的Java字节码就可以在该平台上运行。JVM像是一个中间转换器,将生成的字节码文件在虚拟机中运行,而虚拟机则在不同平台上运行,从而实现Java程序的跨平台。

用类比的方式来理解JVM。两支不同的笔,要将同一个笔帽套在这两支不同的笔上,只有为这两支笔分别提供一个转换器,这个转换器向上的接口相同,用于适应同一个笔帽;向下的接口不同,用于适应两支不同的笔。这个类比中,可以近似的将两支笔认为是两个不同操作系统的平台,将笔帽近似的看做Java字节码程序,将转换器看作JVM。所有平台上的JVM向上提供给Java字节码程序的接口完全相同,向下适应不同平台的接口也不相同。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 导读目录 1.Java程序运行机制 参考书籍 《疯狂Java讲义》(第3版) 李刚 著 《深入理解Java虚拟机》...
    ql2012jz阅读 2,629评论 0 1
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,486评论 11 349
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,438评论 18 399
  • 我们身处在一个合作共赢的时代,开放的人生处处精彩,而封闭的人生举步维艰。 没有人想紧锁心门,我们偶尔会探头环顾这个...
    庚翼阅读 4,597评论 4 3
  • 房间亮着天,我眯着眼。
    嫮媚阅读 1,760评论 0 0

友情链接更多精彩内容