2012-07-19 24 views
5

itibaren İstisnalar Etkili Java bölüm: bir try-catch bloğunun içinde kod eklemeBazı kodları yakalama blokları içine koymak hangi yollarla JVM'nin optimizasyon yapmasını engeller?

belli optimizasyonlar inhibe Modern JVM uygulamaları aksi performans gösterebileceği

Neden ve nasıl yaptığını Bir try-catch bloğu JVM'ler tarafından optimizasyonu engeller mi?

+0

[Bu soru] (http://stackoverflow.com/questions/299068/how-slow-are-java-exceptions) yardımcı olabilir. – Leri

cevap

2

"Neden", istisnalar ve istisna işlemlerinin numaralı varsayımının istisna olduğunu; yani nadiren çalıştırılan kod. Bu, JIT derleyicisinin istisna işleyicilerini optimize etmeye harcadığı sürenin, genel performansın çok az bir yararı olacağını izler.

JIT derleyicinin en iyi duruma getiricisi, optimizasyon maliyetlerine karşı etkili olan optimizasyonların performans faydalarını dengelemelidir. İkincisi şunlardır:

  • bir optimizasyon mümkün olup olmadığını görmek için karmaşık ön şartları kontrol maliyeti
  • uygulanması ve bir sürdürmenin fiili optimizasyonu yapmanın maliyeti ve (Oracle)
  • maliyeti (normal koşullar/varsayımlar altında) bir optimizasyon yapan karmaşık yazılım parçası etkili olmayacaktır.

da istisna işleyicileri optimizasyonunu inhibe teknik nedenleri olabilir. Örneğin, optimizatörün kontrol akışının nereden geldiğini anlaması kolay olmayabilir (hatta mümkün). Bu nedenle, (örneğin, yazmaçlardaki maddeleri önbelleğe alma, ortak alt ifadeleri kaldırma, ...) gerçekleştirilemediğine dayanan optimizasyon yapılamaz.

5

JVM, try/catch bloğu içindeki işlemleri try/catch bloğu dışındakilerle birleştiremez veya yeniden sıralamayabilir. Her karmaşıklık katmanı optimizasyonu zorlaştırır. Göreceli olarak az rastlanan bir durum olması durumunda, JVM tarafından ele alınmayabilir, şüphesiz, optimal kod yerine doğruluk seçecektir.

+0

"Eğer nispeten nadir bir durum varsa, JVM tarafından ele alınmamış olabilir, şüphesiz, en uygun kod yerine doğruluk seçecektir." . Cevabınız nasıl bir parçaya cevap veriyor gibi görünüyor, ancak yine de neden kısmen emin değilim. – Geek

+2

Nedeni onun karmaşık bir durum ve nadiren faydalı olmasıdır. –

-1

Kontrol aşağıdaki linki:

How slow are Java exceptions?

Ben istisnalar Java nesnelerdir tahmin ve bu nesnelerin oluşturulması gerekir. Bir nesne oluşturmak maliyetli bir işlemdir. Bu nedenle istisnaları yalnızca hataları işlemek ve akışı kontrol etmek için kullanmayın.