新聞中心
上周Java 7 GA發(fā)布后,新JIT默認開啟的優(yōu)化中發(fā)現(xiàn)了一個問題。雖然這個問題最早是在Lucene搜索索引器的一個用例中出現(xiàn)的,但是它也有可能普遍存在于其他代碼之中。

這個Bug引來了不少杞人憂天的文章,例如《Don't use Java 7 for anything》,其中暗示所有循環(huán)都有問題。事實上,雖然存在一個有效的Bug(循環(huán)可能無法正確執(zhí)行或者引起SIGSEGV崩潰),但是這個Bug 從Java 6開始就有了,如果開啟了-XX:+OptimizeStringConcat或-XX:+AggressiveOpts優(yōu)化就會發(fā)生這個問題。
這個問題實際只會發(fā)生在特定的循環(huán)(循環(huán)體可能會修改循環(huán)條件)中,該問題的補丁中對此做了說明。在以-Xint(解釋模式)運行的情況下不會發(fā)生這個問題,但在-server模式下就會有問題,服務器端應用程序很有可能就會使用這種模式。
如果問題不算太嚴重,出于此Bug帶來的公眾壓力,Java 7 Update 1中會包含該補丁。由于Java 7剛剛發(fā)布,目前還不會被用于生產(chǎn)環(huán)境,而且它也不是這方面發(fā)現(xiàn)的第一個問題(Oracle在后續(xù)版本中修復了這個問題)。與此同時,問題描述中指出可以通過 -XX:-UseLoopPredicate標志來關閉這個特定的優(yōu)化。
在Lucene和Solr項目中最早發(fā)現(xiàn)該問題的Uwe Schindler詳細記錄了Bug背后的故事,包含后續(xù)的反應(以及過激反應)。他記錄到Twitter上大家的反應和后續(xù)的文章將Bug的優(yōu)先級提高了,它的補丁將被放在Java 7 Update 1中,而不是Java 7 Update 2。但是,他也說了,盡管高優(yōu)先級Bug(會導致SIGSEGV)會在Java 7 Update 1中修復,但是還有兩個其他Bug仍是中優(yōu)先級。
正如Robert Muir的分析中所說的,因為這些優(yōu)化都是在循環(huán)最少10,000次后才被引入的,所以很多測試都覆蓋不到。已經(jīng)有了補丁,會納入以后的Java 7更新中,禁用LoopPredicate優(yōu)化也能讓Java 7擺脫這些問題。
文章題目:Java7Hotspot循環(huán)Bug詳解
本文來源:http://www.dlmjj.cn/article/dpgsosd.html


咨詢
建站咨詢
