Sun公司的Kohsuke Kawaguchi考察了Hotspot JIT在JDK6 u10 b14 debug版中产生的汇编代码,并将其记录在博客中。该博文着重阐述了Java优化的程度。
Kawaguchi 将重点放在两个主要的地方。首先是循环展开(loop unrolling),它是这样一种技术:复制循环的每次迭代所调用的指令以构成一个序列。通过减少循环中计算机需要执行的指令,节省了执行时间。JIT 将其与预处理和事后分析相结合,同时Kawaguchi对此的补充也说明了这样的事实:编译器已从循环的快速执行部分当中移除了一个冗余的数组索引检查。此外,结果汇编代码证明了特定于处理器的优化程度如何。例如,Kawaguchi谈到了下面的代码:
private static byte[] foo() { byte[] buf = new byte[256]; for( int i=0; i buf[i] = 0; return buf; }
所产生的汇编结果使用了特定于AMD64芯片的R8-R15通用寄存器汇编代码。
其次是围绕着锁(locks)而进行的优化。在Java中非竞态锁的获取在不断地改进,而竞态锁的获取却一直存在问题。这个领域的工作还在持续进行中,但是Kawaguchi的工作却说明了几个已经得到改进的地方。
这篇文章展示了该Hotspot编译器很多其他的特性,包括强大的内联——James Gosling注意到一篇相关的博文中说“甚至连存储分配和初始化都需要内联”。这一层级的侵略性(aggression)是可能存在的,部分原因在于 JVM会在必要时做一些潜在不安全的优化。Charles Nutter在今年初参加Lang.NET大会时曾对此提出了一个很好的解释。他也强调了这项工作与JRuby的关系,以及与任何面向JVM的语言的关系。
“过去JVM有多种不同的能力去动态优化和再优化代码……或许最重要的是必要时的动态“逆优化(deoptimize)”。在处理性能问题时,逆优化(Deoptimization)令人非常兴奋,因为这意味着你可以进行更多的侵略性优化——对整个应用不确定的未来的潜在的不安全的优化——知道你可以在安全的路径上回退。一旦你几次遇到相同的路径,你就可以内联整个调用路径。除非明显需要,你可以忽略同步保护。你还可以在发现问题之后改变使用的优化集……本质上,在运行过程中你可以安全的“出错”并且从错误中学习。这就是为什么在特定的基准上Java超越了C和C++以及最终在几乎所有基准上它都能将超越C和C++的主要原因。同时这也是我们的JRuby与微软的IronPython和DLR相比,只需要做很少的事情就可以获得可接受的性能的一个关键原因。”
从理论上讲,像Java这样的解释型语言的性能很有可能最终将超越编译型语言,因为它可以在运行时基于现有硬件进行优化,同时Java中不断提高的对特定于处理器的优化确实令人非常兴奋。对于面向Java平台的开发者来说,一个额外的好处在于随着新版本 Java编译器的发布,代码的性能会不断改进,而无需对应用的源码做任何更改。
英文原文:
http://www.infoq.com/news/2008/05/hotspot_performance国内最棒的Google Android技术社区(eoeandroid),欢迎访问!《银河系列原创教程》发布《Java Web开发速学宝典》出版,欢迎定购
分享到:
相关推荐
### Java SE 6与HotSpot VM故障排除指南关键知识点解析 #### 一、概述 《Java SE 6与HotSpot VM故障排除指南》是Oracle公司于2008年11月发布的一份技术文档,旨在帮助开发人员、系统管理员和技术支持人员解决在...
HotSpot是Oracle JDK和OpenJDK中Java虚拟机(JVM)的一种实现,其特点是高性能、跨平台,并且支持即时编译(Just-In-Time, JIT)。 【标签】: "java11", "jvm", "hotspot" Java Platform, Standard Edition(Java ...
**Java HotSpot 虚拟机**是 Sun 公司针对 Java 平台设计的一款高性能虚拟机,它作为 Java SE 平台的核心组件,为商业关键型应用提供了强大的支持。HotSpot 虚拟机不仅在 Solaris、Linux、Windows 等多种平台上运行...
java 虚拟机 hotspot 源码
### Java HotSpot虚拟机的内存管理 #### 一、引言 Java HotSpot虚拟机作为Sun Microsystems(现已被Oracle...随着技术的进步,未来的Java HotSpot虚拟机将会进一步优化内存管理机制,提供更高效、更稳定的运行环境。
JDK 1.8的HotSpot可能包含了优化的JIT编译策略和垃圾回收算法,例如G1垃圾收集器,它在大内存应用中提供了更好的性能和响应时间。 在JDK 1.8中,还有一项重要改进是 Nashorn JavaScript引擎的引入,这使得Java可以...
《Java HotSpot 虚拟机》文件中包含了关于Java虚拟机(JVM)的深入讨论,尤其是在HotSpot虚拟机上的即时编译(JIT)技术,以及Java语言的最新发展。文件内容侧重于以下几个核心知识点: 1. **Java HotSpot虚拟机的...
Java HotSpot虚拟机(Java HotSpot VM)是Oracle提供的Java运行环境的核心组件之一,它负责执行Java字节码并提供一系列的优化功能来提高Java程序的性能。在Java开发和部署过程中,合理配置Java HotSpot VM选项对于...
《JVM性能工程:深入OpenJDK和HotSpot Java虚拟机》这本书深入探讨了Java虚拟机(JVM)的性能工程,特别关注了OpenJDK和HotSpot这两个Java平台的重要组成部分。本书是为那些希望优化Java应用性能的开发者量身定做的...
java openJDK 源码, Hotspot, 未编译, 原始代码, 直接zip压缩包, java openJDK 源码, Hotspot, 未编译, 原始代码, 直接zip压缩包, java openJDK 源码, Hotspot, 未编译, 原始代码, 直接zip压缩包
《Memory Management in the Java HotSpot™ Virtual Machine》一文深入探讨了Java HotSpot虚拟机中的内存管理机制,这是Java性能优化的关键领域。HotSpot虚拟机是Oracle JDK和JRE的一部分,以其高性能和优化能力而...
甚至这个虚拟机最初并非是为Java语言而开发的,它来源于Strongtalk VM, 而这款虚拟机中相当多的技术又是来源于一款支持Self语言实现“达到C语言50%以上的执行效率”的目标而设计的虚拟机, Sun公司注意到了这款...
本文档提供了Java HotSpot虚拟机(JVM)中内存管理的广泛概述,特别是在Sun公司的Java 2平台标准版(J2SE)5.0版本的发布中。文档描述了可供使用的垃圾收集器(Garbage Collectors),给出了关于如何选择和配置收集...
【标题】"hotspot-8.rar" 涉及的核心知识点是HotSpot虚拟机和JVM(Java Virtual Machine)的学习,这是一款由Oracle公司开发的Java虚拟机实现,广泛应用于Java程序的运行与优化。HotSpot是Java平台的重要组成部分,...
Java HotSpot 客户端编译器设计 Java HotSpot 是 Sun ...Java HotSpot 客户端编译器的设计是基于研究结果和实践经验的,它提供了一种高效的编译方式,可以快速地生成高质量的机器代码,并满足 Java 语言的动态特性。
6. **性能监控和调试工具**:书中可能包含如何使用JVisualVM、JConsole、JFR(Java Flight Recorder)和JMC(Java Mission Control)等工具来监控和诊断HotSpot虚拟机的状态。 7. **并行与并发**:HotSpot虚拟机...
Java 1.6,也被称为Java 6,是Oracle公司发布的一个重要的Java开发工具集(JDK)版本,它在2006年12月首次亮相,为开发者提供了广泛的功能和性能改进。这个版本主要面向Windows操作系统,尤其是64位版本,能够充分...
本文将深入探讨JDK10的底层实现,特别是C++源码以及HotSpot虚拟机的源码,帮助开发者更好地理解和优化Java应用程序。 首先,让我们了解JDK10的关键特性: 1. **局部变量类型推断(Local-Variable Type Inference,...