武汉北大青鸟中南软件学院
400-027-0822

关于java,你不得不知的一些知识(二)

2016-11-12供稿中心: 北大青鸟武汉中南软件学院

使用字节码的主要好处是移植。然而,解释的开销意味着解释程序几乎总是比编译为本机可执行文件的程序运行得更慢,并且Java由于性能低下而受损。这个差距已经被在更近的JVM实现中引入的许多优化技术缩小了。

一种这样的技术,称为即时(JIT)编译,在第一次执行代码时将Java字节码翻译为本地代码,然后缓存它。这导致程序启动和执行比纯解释代码更快,代价是在执行期间引入偶尔的编译开销。更复杂的VM还使用动态重新编译,其中VM分析正在运行的程序的行为并选择性地重新编译和优化程序的部分。动态重新编译可以实现优于静态编译的优化,因为动态编译器可以基于关于运行时环境和加载类集的知识进行优化,并且可以识别热点 - 程序的部分,通常是内部循环,其占据最多的执行时间。 JIT编译和动态重新编译允许Java程序接近本机代码的速度,而不会失去可移植性。

另一种通常称为静态编译或提前(AOT)编译的技术是直接编译为本机代码,就像一个更传统的编译器。静态Java编译器将Java源代码或字节码翻译为本地目标代码。与解释相比,这以牺牲可移植性为代价实现了良好的性能;这些编译器的输出只能在单个架构上运行。 AOT可以给Java接近本机性能,但它仍然不可移植,因为没有编译器指令,所有的指针是间接的,没有办法微管理垃圾收集。

从早期版本开始,Java的性能已经大大提高,并且JIT编译器相对于本地编译器的性能在一些测试中已经显示出非常相似。[12] [13]编译器的性能不一定表示编译代码的性能;只有仔细的测试可以揭示任何系统中的真实性能问题。

运行时引擎概念的独特优点之一是,即使Java程序中最严重的错误(异常)在任何情况下都不应该崩溃系统,前提是JVM本身已正确实现。此外,在诸如Java的运行时引擎环境中,存在附加到运行时引擎的工具,并且每当感兴趣的异常发生时,它们记录在引发异常时(堆栈和堆值)存在于存储器中的调试信息。这些自动异常处理工具为在生产,测试或开发环境中运行的Java程序中的异常提供“根本原因”信息。如果没有JVM提供的运行时支持,这样的精确调试就更难实现。

关于我们
首页
公司简介
课程专业
师资力量
高薪就业
青鸟课程
ACCP
学士后Java
基础教育
UI设计
回到首页