Java程序运行机制

来自CloudWiki
跳转至: 导航搜索

Java的编译

Java编译的过程:


①首先采用通用的java编译器将java源程序编译成为与平台无关的字节码文件(class文件)

②然后由java虚拟机(JVM)对字节码文件解释执行。

  • 注意:java字节码具有平台无关性、可以在各种不同系统平台中运行,但是需要有不同版本的java虚拟机,不同系统平台的java运行环境其java虚拟机是不一样的。
  • Java1-101.jpg

以下内容选看。

编程语言的类型

人的语言/机器的语言

人编程序使用Java、Python这样的高级语言,

但是这种高级语言计算机不懂,必须把它翻译成机器懂的0|1这样的机器码字符串才行。

因此,根据翻译原理的不同,将计算机语言分为解释型语言和编译型语言。

例:

相思

作者:王维

红豆生南国,春来发几枝。

愿君多采撷,此物最相思。

【注解】:

1、红豆:又名相思子,一种生在岭南地区的植物,结出的籽象豌豆而稍扁,呈鲜红色。

2、采撷:采摘。

【韵译】:

晶莹闪亮的红豆,产于岭南;

春天来了,该长得叶茂枝繁。

愿你多多采摘它,嵌饰佩带;

这玩艺儿,最能把情思包涵!


解释型语言(Python)

  • 定义:指用专门解释器对源程序逐行解释成特定平台的机器码并立即执行的语言;不需要事先编译,其直接将源代码解释成机器码并立即执行。所以只要某一平台提供了相应的解释器即可运行该程序。
  • Java1-36.png
  • 特点:
解释型语言执行效率较低,且不能脱离解释器运行,但它的跨平台型比较容易,只需提供特定解释器即可。
  • 常见的解释型语言有,比如的Python与Ruby等。
  • 以唐诗的翻译为例,解释型语言就是,说一句,翻译一句,效率较低:
红豆生南国, -> 晶莹闪亮的红豆,产于岭南;
春来发几枝。 -> 春天来了,该长得叶茂枝繁。
。。。
  • 总结:
1)解释型语言每次运行都需要将源代码解释称机器码并执行,效率较低;
2)只要平台提供相应的解释器,就可以运行源代码,所以可以方便源程序移植;
3)Python等属于解释型语言。


编译型语言(C)

  • 使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。
  • 有些程序编译后,还需要把其他编译好的,可能需要组装两个以上的目标代码生成最终的可执行性文件,称为链接(可实现对低层次代码的复用)
  • 典型的编译型语言有,我们非常熟悉的C语言、C++等。
  • Java1-35.png
  • 特点:
在编译型语言写的程序执行之前,需要一个专门的编译过程,把源代码编译成机器语言的文件,如exe格式的文件,以后要再运行时,直接使用编译结果即可,如直接运行exe文件。因为只需编译一次,以后运行时不需要编译,所以编译型语言执行效率高。
  • 以唐诗的翻译为例,翻译型语言就是,将源语句一次性的翻译成结果语言:
晶莹闪亮的红豆,产于岭南;

春天来了,该长得叶茂枝繁。

愿你多多采摘它,嵌饰佩带;

这玩艺儿,最能把情思包涵!
  • 总结:
1)一次性的编译成平台相关的机器语言文件,运行时脱离开发环境,运行效率高;
2)与特定平台相关,一般无法移植到其他平台;
3)现有的C、C++、Objective等都属于编译型语言。

小笑话

  • Java1-100.jpg

Java语言的类型

思考:如何实现一次编译、到处运行 ?

唐诗的国际化

  • Java是编译型和解释型语言的结合体。
  • 为什么?因为Java的理想比较远大,他的想法是程序一次编译成功后,在各种各样的机器上运行。
  • 用我们唐诗的话说,就是把李白的唐诗翻译成各国语言听。
  • 这个过程怎么完成呢 ?


①首先将王维的唐诗翻译成我们现代中国人说的普通话(中间字节码)

②然后再把普通话(中间字节码)翻译成英、德、俄、日各国文字。



参考文档: [1] 编译型语言、解释型语言与脚本语言三大类型详解 http://blog.csdn.net/zhangliangzi/article/details/50413727
[2] 程序的编译与解释有什么区别? https://www.zhihu.com/question/21486706
[3] 编译型语言与解释型语言 https://jingyan.baidu.com/article/656db918ede71ee381249c05.html
[4] 谈谈java的运行机制 https://www.cnblogs.com/iwinson/p/6074885.html