- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
本机编译
衡量 Java 本机编译
从 Java 源程序生成本机代码的优缺点
级别: 初级
Martyn Honeyford (martynh@), 软件工程师, IBM 英国实验室
2002 年 1 月 18 日
一开始引入 Java 本机编译时,它似乎一定能胜过 JVM,抛弃 Java 平台极力争取的平台无关性。但是即使本机编译越来越流行,并且市场上的本机编译器越来越多,它要真正取代 Java 的可移植性还有一段路要走。不幸的是,就连该技术成熟到足以解决目前让许多人头疼的 Java 性能问题也还尚需时日。请在 论坛中将您对本文的想法与作者和其它读者一起共享。
尽管 Java 语言有许多优点,但是仍然存在几个问题限制了在关键项目中的使用。它们包括执行速度、内存占用、磁盘占用以及 JVM 可用性。虽然 JIT 编译器极大改进了平台的执行速度,J2ME 大幅降低内存占用,但是在许多领域中,Java 应用程序完全无法和它们本机的竞争对手(通常是 C/C++)竞争。为了解决这些问题,许多开发人员已经转向使用 Java 本机编译器,它们允许用 Java 语言编写应用程序,然后将它们编译成本机可执行程序。这种解决方案将以平台无关性为代价,但是它可以导致更快的执行速度和更小的内存占用,这些对于当今许多应用程序都很关键。
为使您能快速掌握 Java 本机编译技术,我们将首先讨论代码编译基础,包括为什么许多开发人员正在使用 Java 本机编译器编译他们的应用程序的简要概述。接下来,我们将使用自由软件编译器和两个不同的应用程序(一个很简单,另一个复杂一些)来测试 Java 本机编译的结果。这些示例和所产生的度量结果将作为研究如何比较最新的 Java 本机编译器和 JVM 的第一手资料。
代码编译基础
要理解本文讨论的内容,您应该熟悉三种最常用的代码编译方法:
使用 Java 编译器(例如,javac)编译 Java 代码
编译本机代码,例如针对特定硬件/操作系统(OS)平台的 C/C++
使用针对特定硬件/OS 平台的 Java 本机编译器来编译 Java 代码 使用 Java 编译器编译 Java 代码是最简单的。我们只要用 Java 语言编写源代码,使用 Java 编译器将源代码编译成 Java 字节码,然后就可以在任何安装了 JVM 的硬件/OS 平台上执行结果了。其缺点是 Java 依赖于 JVM 来实现其特点“一次编写,随处运行”可移植性;不仅要在运行 Java 应用程序的任何平台上安装有可用的 JVM,而且必须还有大量系统资源(内存和磁盘空间)用以支持 JVM。因此,许多开发人员仍然依靠不太灵活但却更具针对性的语言,例如,C/C++。
编译 C/C++ 源程序与编译 Java 源程序相似。只要编写了代码,我们通过一个针对特定硬件/OS 平台的编译器和链接器来运行它。只有在目标平台上才可以执行生成的应用程序,但是不需要安装 JVM(虽然它可能需要一些支持共享库,这取决于所使用的语言)。几乎使用这种方法开发的最简单的应用程序都必须针对每个要运行它们的硬件/OS 平台单独定制。
第三种方法尝试结合以上两种解决方案的优点,允许开发人员使用 Java 语言编写应用程序,然后将它们编译成本机可执行程序。编写了 Java 代码之后,就可以通过 Java 编译器生成 Java 字节码,然后将 Java 字节码编译成本机代码来运行它,或者在 Java 本机编译器中直接运行 Java 代码。需要的步骤数取决于所使用的编译器的需求。
这种方法的优点是可以在 未安装 JVM的目标平台上执行结果代码。这样做的目的是使 Java 应用程序以更快的速度执行,大幅降低运行所需的磁盘空间和内存(虽然有必要为 Java 本机编译器提供支持资源库)。
编译器的目标平台、它们提供的 Java 支持级别以及它们使用的系统资源的数量都是不相同的。在本文的 参考资料一节中可以找到一些当前可用的本机编译器的清单。 关于测试设置
对市场上每种本机编译器的功能部件和性能进行比较已经大大超越了本文的范围。我使用一种编译器 ― GNU 编译器 Java 编程语言版(GNU Compiler for the Java Programming Language, GCJ)作为示例来详细说明本机编译的过程与结果。GCJ 是一种为 GNU 编译器集(GNU Compiler Collection,GCC)开发的编译器,GNU 编译器集是 GNU 项目的一部分。与其它出自 GNU 项目的所有软件一样,GCJ 是双重意义上的自由软件,因此可以很容易地获取(请参阅 参考资料)。如果您正在认真考虑您产品的本机编译途径,当然应该尽可能多地评估编译器,或许可以使用本文中建立的标准。
我的测试系统硬件是一台装
原创力文档


文档评论(0)