2011-09-29 53 views
5

我知道Java可以全面優化,並且可以根據有多少個案例,交換器是稀疏還是密集,以及代碼是否足夠熱以使JIT優化所述代碼來優化交換器。我只是想知道,如果我需要進一步提供「輔助」,比如使用按位進行測試,或者對變量進行測試,或者將變量逐位移動到「更好」的數字,假設代碼確實很熱。 「更好」是0xXX而不是0xFFXX。是否有熱點JIT文檔明確說明需要什麼?而不是「只是沿着xxx的通用編程指南」。Java通常需要多少程序員「協助」才能將JIT切換到調度表?

回答

0

由於Java本身運行在virtual machine,除非我在這裏丟失了一些東西,我不認爲有一個簡單的方法來做到這一點。

因此,用Java,你會得到一個黑匣子,並且優化更多是有風險的,恕我直言。

對於熱點JIT白皮書,see here

+2

我擔心這會成爲答案。我只是想知道熱點或可比較的JIT的優化條件,以優化密集切換到調度表中,此後發現它很熱並且被選爲優化。 –

+0

我明白你的意思了。嗯,我會盡我所能在這個問題上給予賞金。 – Coffee

1

有不會是一個簡單的答案。

我會把這個問題提供給hotspot-dev - 他們可能會提供更多關於這種情況的信息。

誰可能對這個有趣的觀點掛出JVM-1的郵件列表上的其他人(查理·納特,雷米Forax,約翰·羅斯等)

2

對於任何tableswitchlookupswitch的決定已經完成由javac編譯。我從未聽說過JIT試圖將lookupswitch轉換爲tableswitch

所以你的第一步應該是檢查什麼字節碼javac翻譯你的switch

+0

那麼,爲了確保javac使它成爲一個tableswitch,安全的編碼假設(具體的內部編譯器規則)是什麼?而不是隻是「猜測」,做反覆試驗,並進入字節碼,這感覺「髒」。 –

相關問題