自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

別用Java 7?你是在開(kāi)玩笑嗎?

開(kāi)發(fā) 后端
Java 7 剛剛發(fā)布沒(méi)兩天,但來(lái)自Lucene 和Solr 社區(qū)的某些人立即報(bào)料了一些Java 7 中的嚴(yán)重bug。那么到底Java 7 是有什么問(wèn)題,為什么我們等了5 年的 Java 7 現(xiàn)在卻不能使用呢?

Java 7 剛剛發(fā)布沒(méi)兩天,但來(lái)自Lucene 和Solr 社區(qū)的某些人立即報(bào)料了一些Java 7 中的嚴(yán)重bug。甚至 Apache Lucene 項(xiàng)目管理委員會(huì)成員Uwe Schindler 發(fā)布了暫時(shí)不要使用Java 7 的警告信息。那么到底Java 7 是有什么問(wèn)題,為什么我們等了5 年的 Java 7 現(xiàn)在卻不能使用呢?讓我們來(lái)看看實(shí)際的情況:

51CTO推薦專(zhuān)題:Java 7正式發(fā)布

這個(gè)問(wèn)題跟Java 7 無(wú)關(guān),而是跟JVM 有關(guān)

首先這個(gè)問(wèn)題是跟HotSpot JVM 有關(guān),而不是Java 7 語(yǔ)言本身的問(wèn)題。此次發(fā)布的 GA 版本包含三個(gè)bug:7070134, 7044738 和 7068051 ,這三個(gè)bug直接導(dǎo)致JVM 崩潰或者進(jìn)行錯(cuò)誤的計(jì)算。

Hotspot是因?yàn)镻orterStemmer 的sigsegv 而崩潰的

第一個(gè)問(wèn)題(7070134) 是關(guān)于錯(cuò)誤的編譯器對(duì)循環(huán)的優(yōu)化,該特性在Hotspot JVM 中是默認(rèn)啟用的,你可以通過(guò) -XX:-UseLoopPredicate 參數(shù)來(lái)關(guān)閉這個(gè)特性。如果你想了解關(guān)于這個(gè)問(wèn)題的詳情,請(qǐng)看Stemmer.java ,編譯并允許這個(gè)類(lèi)你將會(huì)重現(xiàn) JVM 崩潰并報(bào)嚴(yán)重錯(cuò)誤,信息如下:

 

  1. # A fatal error has been detected by the Java Runtime Environment: 
  2. # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00000000026536da, pid=5432, t 
  3. id=6568 
  4. # JRE version: 7.0-b135 
  5. # Java VM: Java HotSpot(TM) 64-Bit Server VM (21.0-b05 mixed mode windows-amd64 
  6. compressed oops) 
  7. # Problematic frame: 
  8. # J Stemmer.step4()V 

這個(gè)錯(cuò)誤直接在代碼執(zhí)行過(guò)程中發(fā)生,在JDK 1.6 是體驗(yàn)不到的。而最近Lucene 做了一些更靈活的基于 PulsingCodec 算法的索引機(jī)制,而這個(gè)機(jī)制相當(dāng)大的程度上會(huì)導(dǎo)致上述的錯(cuò)誤。

循環(huán)展開(kāi)優(yōu)化會(huì)導(dǎo)致不正確的結(jié)果

第二個(gè)bug (7044738) 是“錯(cuò)誤的計(jì)算”,這個(gè)錯(cuò)誤極為罕見(jiàn)的發(fā)生在OSR (On-Stack Replacement) 編譯嵌套循環(huán)上,控制流退出且對(duì)應(yīng)的內(nèi)存沒(méi)有被考慮到,這直接導(dǎo)致重復(fù)的克隆結(jié)果,想了解編譯細(xì)節(jié)請(qǐng)看older overview (PDF)

一個(gè)最簡(jiǎn)單的解決辦法就是使用 -XX:LoopUnrollLimit=1 參數(shù)來(lái)避免這個(gè)問(wèn)題。

Clone loop predicate during loop unswitch

第三個(gè)bug(7068051) 跟一些老的 feature request 相關(guān),由于一些無(wú)效的JVM 統(tǒng)計(jì)導(dǎo)致使用循環(huán)優(yōu)化后的JVM 崩潰。

結(jié)論

根據(jù)這些bug的情況,只有在你大量的使用這些優(yōu)化方法,那么你才可能已經(jīng)受 Java 7 中存在的問(wèn)題所影響。一般情況下是不受影響的。事實(shí)上 Java 6 的用戶(hù)使用了某些優(yōu)化選項(xiàng)也會(huì)存在問(wèn)題,但因?yàn)檫@些優(yōu)化選項(xiàng)在 Java 7 中是默認(rèn)啟用的才導(dǎo)致這個(gè)問(wèn)題影響那么大,例如 (-XX:+OptimizeStringConcat or -XX:+AggressiveOpts) ,由于這些問(wèn)題在 Java 7 發(fā)布的前 5 天才被發(fā)現(xiàn),因此 Oracle 來(lái)不及解決這些bug,目前 Oracle 似乎也正在準(zhǔn)備下一個(gè)補(bǔ)丁版本,但對(duì)一些高級(jí)用戶(hù)來(lái)說(shuō),這些都不是問(wèn)題,因?yàn)樵创a是開(kāi)放的,你可以做你想做的。

本文譯自 http://blog.eisele.net/2011/07/dont-use-java-7-are-you-kidding-me.html

【編輯推薦】

  1. Java 7正式發(fā)布
  2. GlassFish游來(lái)新版本
  3. NetBeans新版發(fā)布,全面支持JDK 7
  4. 11款用于優(yōu)化、分析源代碼的Java工具
責(zé)任編輯:艾婧 來(lái)源: 開(kāi)源中國(guó)社區(qū)
相關(guān)推薦

2017-10-26 11:18:13

SSD機(jī)械硬盤(pán)固態(tài)硬盤(pán)

2013-11-27 10:16:50

2017-12-27 13:56:16

JavaSCript語(yǔ)言開(kāi)發(fā)

2018-07-23 12:20:52

編程語(yǔ)言Python入門(mén)

2011-12-11 19:14:32

Siri

2014-08-18 10:46:10

IE瀏覽器

2025-04-07 08:45:00

C 語(yǔ)言數(shù)組

2011-12-31 09:11:08

OracleAMD

2017-07-17 16:13:28

戴爾數(shù)字化轉(zhuǎn)型

2017-07-21 16:34:58

戴爾數(shù)字化轉(zhuǎn)型

2020-04-03 12:08:24

美股時(shí)間GMT

2013-04-03 13:52:42

Windows Blu

2020-06-03 10:54:28

戴爾

2021-02-23 09:50:03

運(yùn)維開(kāi)發(fā)技術(shù)

2018-01-18 09:56:11

2022-07-20 14:50:06

馬斯克云端

2012-08-30 10:23:11

2022-05-01 17:46:01

Windows 11微軟操作系統(tǒng)

2021-04-03 23:42:33

人工智能智能設(shè)備技術(shù)

2009-03-17 08:31:08

Window 7微軟用戶(hù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)