Java / JVM dahili bileşenlerine yaklaşma [kapalı]


15

Java'da yaklaşık 8 yıldır programladım ve bir geliştirici olarak dili oldukça iyi biliyorum, ama amacım içsel bilgilerimi derinleştirmek. PL tasarımında lisans dersleri aldım, ancak bunlar çok geniş akademik incelemelerdi (Scheme, IIRC'de).

Birisi ayrıntılara girmeye başlamak için bir rota önerebilir mi? Özellikle, daha kolay ulaşılabilecek veya iyi bir başlangıç ​​noktası olabilecek belirli konular (örneğin çöp toplama) var mı? JVM'nin iç kısımları ve Java programlama dilinin tasarımı hakkında iyi bir üst düzey kitap var mı? Şu anki yaklaşımım JVM spesifikasyonu ve gerektiğinde araştırma ile başlamak olacak .


2
Kişisel yaklaşımım , Java'daki tüm bu "neden tam olarak böyle çalışıyor" durumlarının gerçek nedenini bulmak (ve) olacaktır . Otomatik boks nasıl tanımlanır, genel türler nasıl çalışır? Var-args ne olacak? Ne gelmez SUPERsınıf dosyalarında bayrak aslında musunuz? Bunların çoğu JVM spesifikasyonunun kendisinde tarif edilir, ancak oradan ve beyninize almak için biraz çalışma gerektirir ;-)
Joachim Sauer

Yanıtlar:


13

Yıllar önce Java ile başladığımda bunu biraz yaptım. Benim yaklaşımım VM özelliklerini okumak ve bir sınıfın demonte bayt kodunu gösteren javap -c çıktısına bakmaktı. Ayrıca bir java bayt kodu derleyicisi kullanarak, belirli bayt kodu ile java sınıfları oluşturmayı denedim. Bunu denemek istiyorsanız, jasmin adında bir montajcı var.

Ayrıca , Oracle'dan Brian Goetz'in yayınladığı ve Java 8'de eklenen lambdasları (esas olarak kapanışları) çevirmek için kullanılacak stratejiyi kapsayan Lambda İfade Çevirisi belgesine de bakmak isteyebilirsiniz .

HotJot VM'nin kaynak kodunu OpenJDK'dan ve JDK 8 için lambda destekli (hg deposu) javac derleyicinin erken erişim sürümünü alabilirsiniz , eğer havuzun derinliklerine dalmak istiyorsanız.

Çöp koleksiyonuna bakmak muhtemelen iyi bir fikirdir. Hızlı bir arama , Java'nın çöp ilk GC'si hakkındaki bu Dr. Dobbs makalesini ortaya çıkardı . Bunun iyi bir giriş olup olmadığını bilmiyorum. Zaten mark-and-sweep ve nesil çöp toplayıcılarını bildiğinizi varsayıyorum; değilse, önce bunları okumak isteyeceksiniz.


3

Bazı ek fikirler:

  • Yer alın OpenJDK projesi. Hiçbir şey, hackleme yaparak bazı yazılımların içini anlamaktan daha iyi olamaz!
  • Diğer JVM dillerinin (ör. Clojure veya Scala) JVM için nasıl kod ürettiğine bakın
  • Sizi ilgilendiren ve JVM dahili araçlarının kullanımını gerektiren bir mini proje yapın . Belki bayt kodunu değiştirmek için ASM gibi bir şey kullanmak ..

2

Henüz Java bayt kodu biçimine aşina değilseniz, geçerli Java bayt kodu (veya Jasmin birleştirici) oluşturan küçük bir derleyici yazmayı ve düzgün çalışmasını sağlayın.

Kodunuz tarafından oluşturulan "Merhaba Dünya" veya "4" (verilen 2 + 2) kodlarını görmek çok tatmin edicidir.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.