上周Java 7 GA发布后,新JIT默认开启的优化中发现了一个问题。虽然这个问题最早是在Lucene搜索索引器的一个用例中出现的,但是它也有可能普遍存在于其他代码之中。
这个Bug引来了不少杞人忧天的文章,例如《Don't use Java 7 for anything》,其中暗示所有循环都有问题。事实上,虽然存在一个有效的Bug(循环可能无法正确执行或者引起SIGSEGV崩溃),但是这个Bug从Java 6开始就有了,如果开启了-XX:+OptimizeStringConcat
或-XX:+AggressiveOpts
优化就会发生这个问题。
这个问题实际只会发生在特定的循环(循环体可能会修改循环条件)中,该问题的补丁中对此做了说明。在以-Xint
(解释模式)运行的情况下不会发生这个问题,但在-server
模式下就会有问题,服务器端应用程序很有可能就会使用这种模式。
如果问题不算太严重,出于此Bug带来的公众压力,Java 7 Update 1中会包含该补丁。由于Java 7刚刚发布,目前还不会被用于生产环境,而且它也不是这方面发现的第一个问题(Oracle在后续版本中修复了这个问题)。与此同时,问题描述中指出可以通过 -XX:-UseLoopPredicate
标志来关闭这个特定的优化。
在Lucene和Solr项目中最早发现该问题的Uwe Schindler详细记录了Bug背后的故事,包含后续的反应(以及过激反应)。他记录到Twitter上大家的反应和后续的文章将Bug的优先级提高了,它的补丁将被放在Java 7 Update 1中,而不是Java 7 Update 2。但是,他也说了,尽管高优先级Bug(会导致SIGSEGV)会在Java 7 Update 1中修复,但是还有两个其他Bug仍是中优先级。
正如Robert Muir的分析中所说的,因为这些优化都是在循环最少10,000次后才被引入的,所以很多测试都覆盖不到。已经有了补丁,会纳入以后的Java 7更新中,禁用LoopPredicate优化也能让Java 7摆脱这些问题。
查看英文原文:Java7 Hotspot Loop Bug Details
相关推荐
java 虚拟机 hotspot 源码
### Java HotSpot 性能引擎架构相关知识点 #### 一、引言与概览 **Java HotSpot 虚拟机**是 Sun 公司针对 Java 平台设计的一款高性能虚拟机,它作为 Java SE 平台的核心组件,为商业关键型应用提供了强大的支持。...
HotSpot虚拟机的技术细节并没有在摘录的内容中详细说明,但根据Java SE的官方文档和HotSpot的广泛知识,HotSpot虚拟机通过以下几个方面提高Java程序的性能: 1. 即时编译器:HotSpot虚拟机包含两个主要的JIT编译器...
总的来说,JDK 1.8是一个具有里程碑意义的版本,它的特性如Lambda表达式、Stream API、日期和时间API的改进以及HotSpot虚拟机的优化,都极大地推动了Java语言的发展,提升了开发者的生产力。对于Java开发者来说,...
### Java HotSpot虚拟机的内存管理 #### 一、引言 Java HotSpot虚拟机作为Sun Microsystems(现已被Oracle收购)开发的一款高性能JVM(Java虚拟机),在内存管理方面有着独特而强大的机制。本文旨在深入探讨Java ...
本文档提供了Java HotSpot虚拟机(JVM)中内存管理的广泛概述,特别是在Sun公司的Java 2平台标准版(J2SE)5.0版本的发布中。文档描述了可供使用的垃圾收集器(Garbage Collectors),给出了关于如何选择和配置收集...
《Memory Management in the Java HotSpot™ Virtual Machine》一文深入探讨了Java HotSpot虚拟机中的内存管理机制,这是Java性能优化的关键领域。HotSpot虚拟机是Oracle JDK和JRE的一部分,以其高性能和优化能力而...
### Java SE 6与HotSpot VM故障排除指南关键知识点解析 #### 一、概述 《Java SE 6与HotSpot VM故障排除指南》是Oracle公司于2008年11月发布的一份技术文档,旨在帮助开发人员、系统管理员和技术支持人员解决在...
Java 14 Hotspot 虚拟机的垃圾回收调优是提升应用程序性能的关键环节。本指南主要涵盖了垃圾收集器的优化目标、策略以及各种实现,旨在帮助开发者更好地理解如何调整 JVM 参数以满足特定的需求。 优化目标与策略...
学习JDK 源码必备,提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。 但不一定所有人都知道的是,这个目前看起来“血统纯正”的虚拟机在最初...
java openJDK 源码, Hotspot, 未编译, 原始代码, 直接zip压缩包, java openJDK 源码, Hotspot, 未编译, 原始代码, 直接zip压缩包, java openJDK 源码, Hotspot, 未编译, 原始代码, 直接zip压缩包
JDK7作为Java发展历程中的一个重要版本,引入了许多创新特性,而理解其底层C++源码和HotSpot虚拟机源码对于提升开发水平和优化性能具有重大意义。 首先,JDK7源码是Java Development Kit的基石,包含了Java语言的...
【标题】"hotspot-8.rar" 涉及的核心知识点是HotSpot虚拟机和JVM(Java Virtual Machine)的学习,这是一款由Oracle公司开发的Java虚拟机实现,广泛应用于Java程序的运行与优化。HotSpot是Java平台的重要组成部分,...
《Java HotSpot 虚拟机》文件中包含了关于Java虚拟机(JVM)的深入讨论,尤其是在HotSpot虚拟机上的即时编译(JIT)技术,以及Java语言的最新发展。文件内容侧重于以下几个核心知识点: 1. **Java HotSpot虚拟机的...
Java HotSpot 客户端编译器设计 Java HotSpot 是 Sun Microsystems 开发的一款 Java 虚拟机(JVM),其中客户端编译器(Client Compiler)是 JVM 的核心组件之一。该编译器负责将 Java 字节码编译成机器代码,以...
Java HotSpot虚拟机是Oracle公司开发的一款高性能的Java虚拟机,它是Java运行环境的重要组成部分,负责解释和优化Java代码,确保程序的高效运行。本文将深入探讨Java HotSpot虚拟机的部分参数及其作用,帮助开发者更...
本文将深入探讨JDK10的底层实现,特别是C++源码以及HotSpot虚拟机的源码,帮助开发者更好地理解和优化Java应用程序。 首先,让我们了解JDK10的关键特性: 1. **局部变量类型推断(Local-Variable Type Inference,...
《深入解析JDK7 Hotspot源码》 Hotspot是Oracle JDK中的一个关键组件,它是一个高性能的Java虚拟机(JVM)。Hotspot的名字源于其核心理念:在运行时识别出程序的“热点”代码,然后对其进行优化,以提供最佳的执行...