2016-01-13 60 views
0

根據我對使用動態重新編譯的Java優化的理解,JVM將不斷重新編譯基於實時分析的字節代碼段,從而使其比即使是編寫良好的C程序更快。我的一位同事發表評論說,像Spring,Hibernate或AspectJ這樣的字節碼處理技術將會掩蓋部分被動態地重新編譯。真的嗎?依賴注入是否會對JVM的優化能力產生負面影響?

我使用Google Guice進行依賴注入,我想知道是否潛在的優化丟失會使它比使用普通的傳統Java更慢。

+0

這裏有一些混淆:1)什麼時候Java優化和動態重新編譯一樣? 2)動態重新編譯和依賴注入如何配合動態重新編譯? 3)你能否提供一個資料給你的「已發表評論」來證實你的陳述? –

+0

爲什麼你認爲「像Spring,Hibernate或AspectJ這樣的字節碼操作技術」與依賴注入有任何關係? - 他們不是,他們是獨立的東西 –

+0

謝謝,這就是我的想法。換言之,字節碼操作對動態重新編譯沒有影響。 –

回答

0

在大多數情況下,Spring會使用java代理(java.lang.reflect.Proxy)來獲得像@Cache這樣的特性,只要有一個接口可用,以及用於依賴注入的常規反射(它會調用setXxx當屬性xxx是@Autowired註釋)。

即使需要字節碼操作,該字節碼也會存儲在某個應用程序的ClassLoader中,因此可供JVM進行優化。我看不出這與一些常規代碼有什麼不同。

相關問題