当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:14:00  来源:本站整理

<b>Java理论与实践: 动态编译与性能丈量</b>[Java编程]

赞助商链接



  本文“<b>Java理论与实践: 动态编译与性能丈量</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

这个月,我着手撰写一篇文章,解析一个写得很糟糕的微评测.毕竟,我们 的程序员一向受性能困扰,我们也都想理解我们编写、利用或批判的代码的性能 特点.当我无意间写到性能这个主题时,我常常得到这样的电子邮件:“我写的 这个程序显示,动态 frosternation 要比静态 blestification 快,与您上一 篇的概念相反!”很多随这类电子邮件而来的所谓“评测“程序,大概它们运行 的方法,明显表现出他们关于 JVM 履行字节码的实际方法贫乏基本熟习.所以 ,在我着手撰写这样一篇文章(将在将来的专栏中发表)之前,我们先来看看 JVM 幕后的东西.理解动态编译和优化,是理解若何辨别微评测好坏的关键(不 幸的是,好的微评测很少).

动态编译简史

Java 利用程序的编译历程与静态编译语言(比方 C 或 C++)差别.静态编 译器直接把源代码转换成可以直接在目标平台上履行的机械代码,差别的硬件平 台要求差别的编译器.Java 编译器把 Java 源代码转换成可移植的 JVM 字节 码,所谓字节码指的是 JVM 的“虚拟机械指令”.与静态编译器差别,javac 几近不做什么优化 —— 在静态编译语言中该当由编译器举行的优化工作,在 Java 中是在程序履行的时刻,由运行时履行.

第一代 JVM 美满是注释的.JVM 注释字节码,而不是把字节码编译成机械码 并直接履行机械码.当然,这种技术不会供应最好的性能,因为系统在履行注释 器上耗费的时间,比在需求运行的程序上耗费的时间还要多.

当即编译

关于证实概念的实现来说,注释是符合的,但是早期的 JVM 由于太慢,疾速 得到了一个坏名声.下一代 JVM 利用当即 (JIT) 编译器来提高履行速度.按照 严峻的定义,基于 JIT 的虚拟机在履行之前,把全部字节码转换成机械码,但 是以惰性方法来做这项工作:JIT 只有在肯定某个代码途径将要履行的时刻,才 编译这个代码途径(因此有了名称“ 当即 编译”).这个技术使程序能启动得 更快,因为在开始履行之前,不需求冗长的编译阶段.

JIT 技术看起来很有前途,但是它有一些不足.JIT 消除了注释的负担(以 额外的启动本钱为代价),但是由于若干缘由,代码的优化等级仍旧是普通般.为了避免 Java 利用程序严重的启动耽误,JIT 编译器必须非常疾速,这意味着 它无法把大量时间花在优化上.所以,早期的 JIT 编译器在举行内联假定 (inlining assumption)方面对比保守,因为它们不知道背面大概要装入哪个类 .

固然从技术上讲,基于 JIT 的虚拟机在履行字节码之前,要先编译字节码, 但是 JIT 这个术语普通被用来表示任何把字节码转换成机械码的动态编译历程 —— 即便那些可以注释字节码的历程也算.

HotSpot 动态编译

HotSpot 履行历程组合了编译、性能解析以及动态编译.它没有把全部要执 行的字节码转换成机械码,而是先以注释器的方法运行,只编译“热门”代码 —— 履行得最频繁的代码.当 HotSpot 履行时,会汇集性能解析数据,用来决 定哪个代码段履行得充足频繁,值得编译.只编译履行最频繁的代码有几项性能 上风:没有把时间浪费在编译那些不常常履行的代码上;这样,编译器便可以花 更多时间来优化热门代码途径,因为它知道在这上面花的时间物有所值.并且, 通过耽误编译,编译器可以拜候性能解析数据,并用这些数据来改良优化抉择, 比方能否需求内联某个办法调用.

为了让事情变得更复杂,HotSpot 供应了两个编译器:客户机编译器和服务 器编译器.默许采取客户机编译器;在启动 JVM 时,您可以指定 -server 开关 ,挑选服务器编译器.服务器编译器针对最大峰值操作速度举行了优化,实用于 需求长期运行的服务器利用程序.客户机编译器的优化目标,是削减利用程序的 启动时间和内存损耗,优化的复杂程度远远低于服务器编译器,因此需求的编译 时间也更少.

HotSpot 服务器编译器可以履行各种样的类.它可以履行很多静态编译器中 常见的尺度优化,比方代码晋升( hoisting)、大众的子表达式排除、循环展开 (unrolling)、范围检测排除、死代码排除、数据流解析,还有各种在静态编译 语言中不实用的优化技术,比方虚办法调用的聚合内联.


  以上是“<b>Java理论与实践: 动态编译与性能丈量</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .