Java编译技术

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java编译技术

一引言

目的:深刻理解Java技术及其本质,选择自己需要的系统。

分类:

(1)采用解释器的Java编译系统

(2)采用及时编译技术的Java编译系统

(3)采用动态编译的Java编译系统

(4)采用本地编译技术的Java编译系统

(5)采用转换器的Java编译系统

编译器就是从源语言到目标语言的转换器。

编译的发展:

(1)没有编译

机器语言,最早的机器是不需要编译器的,因为最早的机器是小、简单的,在这样的机器上,能以二进制流的方式输入程序,可以不要编译器。

(2)汇编语言和汇编程序

随着更复杂的机器的出现,出现了汇编语言和汇编程序,汇编程序主要是一对一地把汇编指令变换成机器指令。

(3)编译程序、编译系统

独立于特定机器的机器码的高级程序语言来描述问题,这些独立于特定目标机的程序语言就需要完善的编译程序来编译生成特定于机器的目标码。

没有编译器,也就没有可以独立于机器的高级语言。

编译系统设计的好坏影响着程序编译时间的长短,编译生成的目标代码的质量。

优点:

1)大大提高了程序员的编程效率; 2)程序语言语义的限制,减少了程序的逻辑错误;

3)程序也很容易进行调试。

缺点:

编译器及其编译后生成的目标代码,在速度和空间上都不能与汇编语言相匹敌。

1.静态编译器

静态编译器也即通常所说的编译器。

其工作原理是:多个编译单元的编译结果被链接生成一个可执行文件,也可以将编译单元和以前编译的系统库链接起来生成一个可执行文件。

库文件也可以在程序执行时再链

接,这样的库被称为动态链接库(DLLs)。

C、C++都采用这种编译器。

优点:

是生成的代码效率高,即生成的代码执行速度快;

缺点:

编译过程需要花些时间,而且编译器对代码优化的越好,需要花费的时间也越多。

编译的时间长不利于程序的调试,因为一个程序在成功地运行前可能需要几十次甚至上百次的编译。

2.解释器

语言解释器(为了与Java编译系统中的解释器相区别,将此处的解释器称为语言解释器)也是以源程序作为输入,但它不是在翻译结束时生成可执行的目标码,而是按照源语言的定义边解释边执行。

Basic、Lisp就采用的是纯解释器。

优点:适用于调试程序,所以程序

语言的调试工具一般都采用语言解释器,语言解释器还常用于作业控制语言和交互语言的“立即命令”。

缺点:

效率低(也即速度慢),它可能对某一源程序语句反复解释执行若干次,而且不能对结果代码进行优化。

编译执行和解释执行是两种最基本的运行程序的途径,目前出现的各种各样的Java编译系统无非是这两种运行途径的组合。

目前,运行Java的方法主要有四种:解释、及时编译、动态编译、本地编译、转换器及硬件实现。

Java源程序经编译后生成字节码文件,字节码程序可被字节码优化器进行优化,生成高效的字节码,最后字节码被虚拟机或Java芯片执行,此外,也可采用类似C/C++的静态编译技术,将源程

序或字节码编译、连接后生成可执行文件,直接在本地执行。

二具体编译技术

1 采用解释器的Java编译系统

优点:

平台无关性,支持Java的动态特性和安全性。

缺点:

与完全编译执行的程序相比,速度还是太慢。由于是解释执行,也很难采取优化措施。

2 采用及时编译技术的Java编译系统

及时编译技术(just-in-time compiler, JIT ),即在方法被执行前,将其动态的编译为机器代码(注:被编译后的代码被保存在内存中)。

Java

Java

B ytecodes

优点:

1)执行速度快;

2)保持了Java 的动态特性、可移植性、安全性。

缺点:

1) 占部分内存空间;

JIT 编译器需要额外的空间放编译生成的代码;

2) 能采用的优化技术很有限;

3) 对于某些花费在Java 代码执行上的时间少的,采用JIT 编译及其

优化技术无法得到性能的显著改

善。

例如:回收、同步、调本地方法等。

3 采用动态编译的Java编译系统

Sun公司推出HotSpot,是将即时编译器和解释器结合起来,有选择地编译和优化频繁执行的方法。

动态编译器包括解释器、及时编译器、测试器,当方法字节码被首次执行时采用解释执行的方式,在运行的过程中,测试器记录代码被执行的性能信息,如方法被调用的次数,及执行的时间,并根据一定的标准选择字节码方法,将其编译为本地方法并进行优化。当该方法再次被执行时,则直接执行它的本地方法。若方法没被编译,则再次解释执行该方法。

理论依据:据统计,80%的代码执行时间往往花在20%的代码上。要找出这20%的代码,将其编译成本地代码并采用高效的优化技术进行优化,提高程序的运行效率。

优点:执行速度快;可利用运行的信息动态调整程序的执行性能。

缺点:可以采用的编译优化技术有限;如何有效的抽取、统计、评价程序运行时的信息是动态编译的关键。

4 采用本地编译技术的Java编译系统

(1)源代码本地编译器

将Java源代码文件编译生成静态的本地可执行文件的高性能编译器;

(2)字节码本地编译器

将Java字节码文件编译生成本地可执行文件的高性能编译器。

优点:

1)执行速度快;使用本地编译器,Java 程序的执行速度和C++程序相当。

2)由于字节码容易被反编译成源程序,不利于软件保护,采用本地编译器生成本地机器码则解决了这个问题。

缺点:

1)不可移植性(部分)

2)降低Java的安全性。

相关文档
最新文档