2013-06-28 17 views
6

Java JIT, bayt kodunu aynı makinedeki her çalışmada aynı optimizasyonlarla derler mi?Java JIT, belirleyici olarak bayt kodu derler mi - aynı makinedeki her çalışma için aynı optimizasyonlar var mı?

Belirli bir anda CPU kullanımı gibi dinamik faktörleri dikkate alıyor mu, yoksa geçici faktörlerden bağımsız olarak her zaman aynı optimizasyonları yapacak mı?

+0

Hangi Java JIT derleyicisi? – SLaks

+1

HotSpot – selig

+0

ile ilgileniyorum Programınız rasgeleliğe sahipse ve bir yöntem A ve başka bir çağrı B yöntemi çağırırsa, o zaman hayır, aynı optimizasyonları alamazsınız. –

cevap

4

Hayır, eniyilemeler deterministik değildir. Tam olarak aynı tek iş parçacıklı, tam deterministik programı çalıştırsanız bile, hangi yöntemlerin optimize edileceğini belirlemek için JIT tarafından kullanılan örnekleyici farklı bir set seçebilir.

Oluşturulan makine kodunu değiştirebilen başka bir şey, kod tarafından başvurulan belirli sabitlerin gerçek bellek konumlarıdır. JIT, bu bellek konumlarına doğrudan erişen makine yönergelerini yayabilir, bu da farklı geçişlerdeki makine kodu arasında ek farklar ortaya çıkarır.

Jikes RVM'u kullanan araştırmacılar, bu sorunu, Compiler Replay adlı bir özellik kullanarak, bu eşleştirmeler için bu sorunu giderdiler.

İlgili konular