- 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虚拟机(JVM)是可运行Java代码的假想计算机。只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行。 JIT是Just in time compilation的缩写, 是一种利用在运行时将字节码(Bytecode)翻译为机器码(Machine code),并保存在内存中, 在后续的运行中直接调用机器码, 从而改善字节码编译语言性能的技术。JVM的Hotspot就是Java虚拟机中JIT的实现.简单的说,也就是当一段代码被运行的次数大于某个值时, 成为所谓的Hot Spots, JVM就会把这段代码编译成机器码. 通过下面的程序,我们将看到JVM的Hot Spot所起的作用. 程序中用到了一个高精度的Java计时器, 看我的另外一篇随笔用JNI实现一个高精度的Java计时器.?1?public?class?JITDemo?{?2??3?????public?static?void?main(String[]?args)?{?4?????????Timer?timer?=?new?Timer();?5??6?????????for?(int?i?=?0;?i??25;?i++)?{?7?????????????timer.reset();?8?????????????sum(100);?9?????????????System.out.println(i?+?:??+?timer.getDuration());10?????????}11?????}12?13?????public?static?int?sum(int?n)?{14?????????if?(n?=?1)15?????????????return?1;16?????????return?n?+?sum(n?-?1);17?????}18?} 上面的程序调用sum方法25次, 并记录了每一次所用的时间, 运行结果是0: 0.16510478287044861: 0.0279365114840014582: 0.0142476208568407433: 0.0142476208568407434: 0.0139682557420007295: 0.0142476208568407436: 0.0142476208568407437: 0.0139682557420007298: 0.0139682557420007299: 0.01424762085684074310: 0.01452698597168075811: 0.01424762085684074312: 0.01424762085684074313: 0.01424762085684074314: 0.3911111607760204315: 1.55103511759176116: 0.00810158833036042317: 0.00726349298584037918: 0.00754285810068039319: 0.00754285810068039320: 0.00726349298584037921: 0.00754285810068039322: 0.00754285810068039323: 0.00726349298584037924: 0.007263492985840379我们看到第14次的调用耗时突然增加了, 然后在第16次以后下降到14次以前的一半左右.这不是偶然的, 你可以多次运行这个程序, 每次你都会看到类似的结果.前面说当一段Java代码运行的次数大于某个值时, 会被编译成机器码,这个值默认是1500次。而每个 sum(100) 回归调用sum方法100次, 第14次的时候,sum正好被调用了1500次(从0开始计数)。也就是说第14次的时候激活了JVM去编译sum方法,所以耗时突然增加,然后又减少。更进一步的证明是, 用 java -XX:+PrintCompilation JITDemo 来启动程序,结果是?......12: 0.01424762085684074313: 0.014247620856840743? 7?????? piler.jit.JITDemo::sum (16 bytes)14: 0.841168360783
文档评论(0)