2010-04-06 14 views
5

tabi gelmez Nihayetinde kodumu yavaşlatmak için bastırılmalı mıyım?bir Java alıcı performans kaybına

+1

Vakumda performans soruları işe yaramaz. Uygulamanızdaki performansa duyarlı bir şeritte belirlendikten sonra bunu kendiniz yapın. – djechlin

cevap

4

JIT derleyici, yöntemi satır içi gösterecektir.

kod Sana iki cevapları

int b = obj.GetA(); 
+0

Bu doğru değil. Bir C/C++ derleyicisi bu tür bir işlevi belirtecektir, ancak Java'da yapamazsınız çünkü VM işlevin uygulanıp uygulanmayacağını (AOP, AspectJ vb.) Bilmiyordur. – cletus

+1

@cletus VM, tüm Java bayt kodu yönergelerini yorumlar ve dolayısıyla bunun farkındadır - AspectJ –

+0

@binil gibi byte kodlu dokuma araçları tarafından yapılan değişiklikler bile, Michael: Bu, alıcı son olmadıkça nasıl çalışır? Alıcıyı geçersiz kılan alt sınıflar nedir? – Thilo

3

gibi görünmelidir:

  1. doğrudan değişken erişen vs gaz giderici kullanmak için önemli bir performans cezası olduğunu sanmıyorum . Kodun bu tür bir karar için performanstan ne kadar anlaşılır ve okunabilir olduğuna dair daha fazla endişelenirim.
  2. Sizin için önemli olabilecek ya da olmayabilir OO tasarım prensiplerine göre, normalde verileri gizlersiniz ve buna ulaşmak için getter yöntemini sağlarsınız — Bu yaklaşımın esasları hakkında ayrıntılı bir tartışma here.
+0

Diğer yandan, 'get' yöntemleri genellikle kapsülleme işlemini kesintiye uğratır (özellikle de 'set' yöntemiyle birlikte geliyorsa). –

1

Teorik olarak, yapılmakta olan bir yöntem çağrısı nedeniyle bazı çalışma zamanı cezası var. Gerçekte, bu iki nedenden dolayı genel performansı üzerinde çok az etkisi vardır:

  1. programın en iç halkanın içinde gerçekleşiyor obj.getA() sürece, kodun genel performansı üzerinde daha sonra etkisi olacak ihmal edilebilir. Performans bir sorun olduğunda, kodunuzun darboğazlığını göz önünde bulundurmalısınız. Bu sıcak noktalarda olmayan kodun optimizasyonu için bir nokta yok. Bu noktaları tanımlamak için kodunuzun bir profiler aracılığıyla yürütülmesini analiz etmeniz gerekir.
  2. As @Michael, JVM'nin gerçek yürütmeye dayalı kodlamayı başlatan bir "Just In Time" derleyici/eniyileyici kullandığını söylüyordu. Sadece bu tür en iyi duruma getirme işlemlerini gerçekleştirir (bkz. Bu talk)
İlgili konular