Yapılması gereken birkaç örnek var. Jikes'in uygulamasına aşina değilim, ama hem Java tabanlı tasarımlar hem de PyPy'de okudum. Onların çoğu ortak olan şeyleri iki seviyeye ayırmak: çalışma zamanı/yorumlayıcı seviyesi ve uygulama seviyesi. Her seviyenin kendi nesneleri, istisnaları, yürütme akışı, vb. Vardır.
Özetle düşündüğünüzde, anlaşılması daha kolaydır. Çalışma zamanı katmanı, yönetilen veya düşük seviyeli veya yüksek seviyeli, zorunluluklu veya işlevsel bir şekilde yazılmış olabilir. Bu gerçekten önemli değil. Önemli olan, işlevi, ne yaptığıdır. Sonunda makine koduna çevrilir ve tüm makine kodları bir makineyle aynıdır. Bu kod, opcodes ve verileri girdi olarak alır, buna göre önceden tanımlanmış eylemler yapar, kaynakları yönetir vb.
Uygulama katmanı bu op kodlarında bulunur. Uygulama katmanı, girişi alan, işleyen ve çıktı yapan başka bir genel işlevi temsil eder. Bu adımlar, bunlara yerleşik bir bellek yönetim rutinine de sahip olabilir. Çalışma zamanı, opcodes'un geçerli olduğu sürece ne yaptığını umursamıyor ve sadece onları çalıştırıyor. Teorik olarak, bir GC dili içeren bir GC dili içeren bir GC dili yazabilirsiniz ... böylece ENIAC hızlarına ulaşana kadar. ;)
Jikes gibi tasarımlardaki farklılaştırıcının onların verimliliği (ve bazen esneklik) olduğunu söyleyebilirim. GC dilinde bir GC, yorumlayıcı veya çalışma zamanı yazmak yeterli değildir. Sonuç, genellikle hız anlamına gelen kullanılabilir olmalıdır. Uygulama katmanında yerel kod entegrasyonunun ele alınması için hükümler de gerekebilir. Gerçek işin çoğu bu şeylere gider. Sadece bir GC dilinde bir GC'yi çalıştırmak gerçekten kolay bir parçadır: temel olarak sadece farklı soyutlama düzeylerinde nesneleri etiketlemek ve yönetmek.
Not: GC dilini ve GC tabanlı çalışma zamanını tasarlarsanız, performans ve basitlik artırmaları için bundan yararlanabilirsiniz. Örneğin, iki tam çöp toplayıcısına sahip olmak yerine, biri diğerinin üstünde olmak yerine, üstte ince bir GC ile altta daha akıllı bir GC'ye sahip olabilirsiniz. Daha akıllı GC, çalışma zamanı ve uygulama seviyesi arasındaki farkı bilir, ayrı ayrı çalıştığından ve yanlış karıştırma yapmadığından emin olur. İnce üst düzey GC esas olarak, ana GC'nin anlayacağı şekilde ana GC veya etiket nesnelerine prosedür çağrıları yapar, ancak bu bir ton ek yük getirmez.
Bu tür projelerden her biri biraz farklıdır. Hedef ve uygulama dillerinin doğası, tasarım seçimlerini çok zorluyor. Sorunu nasıl çözdüğünüz konusunda size yaratıcı olmak için bolca fırsat verir.
Gerçek cevap, kaynak kodunda yer alır ... bu yüzden Jikes'in kaynak kodunu getirin ve içindeki arama yapın. –
Bunu yaptım. Yine de çok büyük bir proje ve hiçbir özel açıklama bulamadım. "JVM'nin nasıl çalıştığını" yanıtlamak gibi "HotSpot deposunu indirip gitmeye başla!" –
MMTK hakkında bir konuşma duydum ve temelde bir program üreticisi. Ayrıca makalelerini okuyabilir ve yazarlara sorabilirsiniz ... –