编译器优化方法简介

编译器优化方法简介

ID:38345941

大小:21.32 KB

页数:3页

时间:2019-06-10

编译器优化方法简介_第1页
编译器优化方法简介_第2页
编译器优化方法简介_第3页
资源描述:

《编译器优化方法简介》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Java编译器优化方法简介(1)2010-09-1615:57shutiao2008.javaeye.com 我要评论(0) 字号:T 

2、 TJava应用程序的编译过程与静态编译语言(例如C或C++)不同,Java编译器把Java源代码转换成可移植的JVM字节码,这里向大家描述一下Java编译器优化的概念。AD:你对Java编译器优化的概念和方法是否熟悉,这里和大家分享一下,Java应用程序的编译过程与静态编译语言(例如C或C++)不同。静态编译器直接把源代码转换成可以直接在目标平台上执行的机器代码,不同的硬件平台要求不同的编译器。Java编译器把Java源

3、代码转换成可移植的JVM字节码。两条编码准则与Java编译器我们在写代码时,常常会提到两条原则:1、方法要尽量短,大方法要分解成小方法;2、不要重复发明轮子。我们在强调这两个原则的时候,往往只关注的是代码简洁、易维护等方便我们人的因素,其实这样做还可以大大方便Java编译器优化代码。Java编译器优化简介:Java应用程序的编译过程与静态编译语言(例如C或C++)不同。静态编译器直接把源代码转换成可以直接在目标平台上执行的机器代码,不同的硬件平台要求不同的编译器。Java编译器把Java源代码转换成可移植的JVM字节码。与静态编译器不同,Javac几乎不做什

4、么优化,在静态编译语言中应当由编译器进行的优化工作,在Java中是在程序执行的时候,由运行时执行优化。即时编译对于证实概念的实现来说,解释是合适的,但是早期的JVM由于太慢。下一代JVM使用即时(JIT)编译器来提高执行速度。按照严格的定义,基于JIT的虚拟机在执行之前,把所有字节码转换成机器码,但是以惰性方式来做这项工作:JIT只有在确定某个代码路径将要执行的时候,才编译这个代码路径(因此有了名称“即时编译”)。这个技术使程序能启动得更快,因为在开始执行之前,不需要冗长的编译阶段。JIT技术看起来很有前途,但是它有一些不足。JIT消除了解释的负担(以额外的

5、启动成本为代价),但是由于若干原因,代码的优化等级仍然是一般般。为了避免Java应用程序严重的启动延迟,JIT编译器必须非常迅速,这意味着它无法把大量时间花在优化上。所以,早期的JIT编译器在进行内联假设(inliningassumption)方面比较保守,因为它们不知道后面可能要装入哪个类。虽然从技术上讲,基于JIT的虚拟机在执行字节码之前,要先编译字节码,但是JIT这个术语通常被用来表示任何把字节码转换成机器码的动态编译过程——即使那些能够解释字节码的过程也算。HotSpot动态编译HotSpot执行过程组合了编译、性能分析以及动态编译。它没有把所有要执

6、行的字节码转换成机器码,而是先以解释器的方式运行,只编译“热门”代码——执行得最频繁的代码。当HotSpot执行时,会搜集性能分析数据,用来决定哪个代码段执行得足够频繁,值得编译。只编译执行最频繁的代码有几项性能优势:没有把时间浪费在编译那些不经常执行的代码上;这样,编译器就可以花更多时间来优化热门代码路径,因为它知道在这上面花的时间物有所值。而且,通过延迟编译,编译器可以访问性能分析数据,并用这些数据来改进优化决策,例如是否需要内联某个方法调用。为了让事情变得更复杂,HotSpot提供了两个Java编译器:客户机编译器和服务器编译器。默认采用客户机编译器;

7、在启动JVM时,您可以指定-server开关,选择服务器编译器。服务器编译器针对最大峰值操作速度进行了优化,适用于需要长期运行的服务器应用程序。客户机编译器的优化目标,是减少应用程序的启动时间和内存消耗,优化的复杂程度远远低于服务器编译器,因此需要的编译时间也更少。HotSpot服务器编译器能够执行各种样的类。它能够执行许多静态编译器中常见的标准优化,例如代码提升(hoisting)、公共的子表达式清除、循环展开(unrolling)、范围检测清除、死代码清除、数据流分析,还有各种在静态编译语言中不实用的优化技术,例如虚方法调用的聚合内联。Java编译器优化

8、方法简介(2)2010-09-1615:57shutiao2008.javaeye.com 我要评论(0) 字号:T 

9、 TJava应用程序的编译过程与静态编译语言(例如C或C++)不同,Java编译器把Java源代码转换成可移植的JVM字节码,这里向大家描述一下Java编译器优化的概念。AD:持续重新编译HotSpot技术另一个有趣的方面是:编译不是一个全有或者全无(all-or-nothing)的命题。在解释代码路径一定次数之后,会把它重新编译成机器码。但是JVM会继续进行性能分析,而且如果认为代码路径特别热门,或者未来的性能分析数据认为存在额外的优化可

10、能,那么还有可能用更高一级的优化重新编译代码。JVM

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。