, satır içi çağrılar için satır içi çağrı sayısını denetleyen -XX:MaxInlineLevel
(varsayılan 9 değeriyle) bağımsız değişkenine sahiptir. Neden böyle bir sınır var? JVM'nin ne kadar derinlemesine karar vermesi için yeterli frekans ve kod büyüklüğüne dayalı olağan buluşsal neden olmasın?JVM neden maksimum bir inline derinliğe sahip?
cevap
Bazı önemli arama bu ilginç küçük fragment (Aslında kadarıyla sayfası olarak var ortaya çıkarır (bu derin iç içe Guava checkArgument
çağrı derinliği nedeniyle inlined değil ki bana gösterilen JitWatch tarafından istenir) ) Google arama: Eğer satır içi uygulaması durdurmak önce gitmek ne kadar derin zor bir sınırı beklendiği gibi MaxInlineLevel
olduğunu düşündürmektedir
if (inline_depth() > MaxInlineLevel) {
return "inlining too deep";
}
if (method() == callee_method
&& inline_depth() > MaxRecursiveInlineLevel) {
return "recursively inlining too deep";
}
. Ayrıca, MaxRecursiveInlineLevel
'un, sadece foo()
foo()
çağrıları gibi, foo()
çağrılarını yapan, doğrudan özyinelemeli çağrılara atıfta bulunduğunu da önerir.
Yani benim tahminim yorumunda haklı olduğunu düşünüyorum - MaxInlineLevel
sen inlining çağrı yığını tam derinliği başvurular tutmak ihtiyacı olacağını tespit etmek için, çünkü karşılıklı özyineleme karşı korumaktır.
MaxInlineResursionLevel
denetimleri foo()
aramalar foo()
inlining.
Başvurulan kodun gerçek bir JVM olamayabileceğini unutmayın.
Yorumlar @apangin, açık JDK 8'in sıcak noktasının daha modern bir sürümünü bulur, artık bu kadar basit değil. Tam yığının, özyinelemeli çağrılar için arandığı görülüyor, dolayısıyla karşılıklı geri çekilme şimdi de MaxRecursiveInlineLevel
geçmişten engelleniyor olabilir.
Çok eski kaynaklara bakıyorsunuz. Doğru yer [hg.openjdk.java.net] adresindedir (http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/). MaxRecursiveInlineLevel, hem doğrudan hem de dolaylı (http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/c1374141598c/src/share/vm/opto/bytecodeInfo.cpp#l389) özyinelemeli çağrıları sayar. – apangin
@apangin - Bu, yorumun söylediği şeyi yapıyor gibi görünmüyor. Ayrıca sadece 'MaxRecursiveInlineLevel' ile karşılaştırılıyor. İyi bulmak olsa da. – OldCurmudgeon
Daha derine inin. [Döngü] (http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/c1374141598c/src/share/vm/opto/bytecodeInfo.cpp#l401), callee yöntemine bakmak isteyen tüm kareler boyunca yürür Yığın herhangi bir yerinde sunar. [MaxInlineLevel] (http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/c1374141598c/src/share/vm/opto/bytecodeInfo.cpp#l380) artık InlineTree yapıcısında ayarlanmıştır. – apangin
- 1. anlama maksimum JVM yığın boyutu - 64bit
- 2. En küçük derinliğe sahip bir ikili arama ağacı oluşturma
- 3. JVM neden iconst_2 - iconst_5 opcodes?
- 4. 16-bit derinliğe CvMat * 8 bit derinliğe dönüştürme
- 5. LinearLayout maksimum yüksekliğe sahip mi?
- 6. , JVM
- 7. Bir JVM
- 8. Paragraf inline ile inline
- 9. Entity Framework 6 Dinamik derinliğe sahip bir varlığın derin kopyası/kopyası
- 10. Tek bir JVM
- 11. Ebeveyn maksimum/maksimum yüksekliğe sahip olduğunda CSS yüzde yüksekliği
- 12. JVM
- 13. JVM
- 14. Mongo: anahtar bir seviye derinliğe göre sorgu
- 15. Chrome, inline PDF'lerde "PDF belgesi yüklenemedi" hata iletisine sahip
- 16. Sabit maksimum yüksekliğe sahip metin sarısı
- 17. Maksimum ve özel değerlere sahip MySQL satırları
- 18. 1 bit derinliğe sahip bir TIF kaydetmek için en iyi web görüntülenebilir formatı nedir?
- 19. WPF'de sonsuz derinliğe sahip bir TreeView oluşturmak için veri bağlama özelliğini nasıl kullanırsınız?
- 20. Tomcat jvm
- 21. Matuplotlib inline ile Jupyter QtConsole sözdizimi inline
- 22. Her bir anahtar için maksimum değere sahip satırı bulun
- 23. iOS'ta maksimum uyumluluğa sahip statik bir kütüphane nasıl oluşturulur?
- 24. Maksimum içeriğe sahip bir div öğesine yeniden boyutlandırma
- 25. Inline bash script değişkenleri
- 26. Doğruluk/JVM
- 27. Shutdownhook JVM
- 28. Çoklu Dizini Tam derinliğe (Pandalar) Sıralama
- 29. Inline assembly'ı çalıştırın
- 30. Neden giriş 524288 için varsayılan maksimum uzunluk?
Hiç kesin değil ama muhtemelen başka yollarla savunmak için zor/pahalı olabilecek karşılıklı yineleme tuzaklarını önlemek için. – OldCurmudgeon
@OldCurmudgeon ama o zaman MaxRecursiveInlineLevel – MrSimpleMind
@MrSimpleMind var - İlginç - Bu yüzden açıkça yanlış. Başka bir sebep olmalı. – OldCurmudgeon