2012-06-28 13 views
8

Kaynak kodunun .NET ve JRE Çerçeveler aracılığıyla makine koduna dönüştürülmesini öğreniyorum. Başlamak için iki süreci karşılaştıran bazı araştırmalar yaptım ve this diagram'u yarattım. Doğruluğunu eleştirmek için biraz yardıma ihtiyacım var ve daha da önemlisi, derleme yolunu daha iyi anlamak için kaçırdığım ciddi şeyleri ekliyorum. baytkoduna aşağı derlemekJava Runtime Environment, derleme işlemi açısından .NET çerçevesiyle nasıl karşılaştırılır?

enter image description here

+2

Orada "assembler" ile ne demek istiyorsun? Şimdi göründüğü gibi, yanlış bir şey yok: CLR/JVM, derleme değil, bunun yerine doğrudan makine kodu üretiyor. En azından JVM (CLR'yi düşünmüyorum) bir yan ürün olarak montaj üretebilir, ancak bu zorunlu değildir. – Voo

+0

@Voo, assembler tarafından İnsan tarafından okunabilir derlemeyi, cpu mimarisinin anlayabileceği makine koduna dönüştürecek bir program demek istiyorum. Bunun sürecin tamamında gereksiz olabileceğini görüyorum. – jesterII

+1

@EJP, Voo, JVM'nin bayt kodu üreten Java derleyicisi değil, makine kodu oluşturduğunu söylüyor. – jesterII

cevap

10

Hem NET ve Java, yani sanal makine için talimatlar içeren bir ara dildir. Makine kodu değil, çünkü doğrudan fiziksel bir makinede çalıştırılamıyor. Bunun yerine ne olur (bugün en azından; Java'nın bu açıdan daha koyu bir geçmişi vardır), çalışma zamanında, SM komutlarını doğrudan doğruya çalıştırılan yerel koda çeviren tam zamanında bir derleyicinin çalışmasıdır. Bu sadece yorumlamak için büyük bir performans avantajı var.

Bu konuda biraz farklıdırlar. Su ^H^H Oracle'ın Java uygulaması, yalnızca yoğun olarak kullanılan ve başka şekilde yorumlanan parçaları derleyen, yorumlama, ölçme ve JIT'nin akıllı bir karışımını kullanır. Bu, JIT derleyicisinin (aksi takdirde işlem başlatma süresinin uzaması gereken) başlangıçtaki etkisinin azaltılması ve gerektiğinde iyi performansın sağlanmasıdır. Öte yandan her zaman JIT-kullanılan tüm kodları derler (kullanılmayan kodlar derlenmez).

Yorumlarınızda bahsettiğiniz bir soruya gelince: Evet, CLR ve JVM , gibi programların çalıştırıldığı platformlardır. Bir sanal makine bir makinedir, sadece daha az donanımdır. Her ikisi de, karşılık gelen bir çerçeve, .NET için Temel Sınıf Kütüphanesi ve Java için Java sınıfı kitaplığı ile sıkı bir şekilde bütünleştirilmiştir. Bunlar çerçeveler.

+0

".NET'te bir derleme derleme birimi" ne demek istediğini açıklar mısınız? – jesterII

+3

Visual Studio'da tek bir projede gördüğünüz, tek bir ".exe" veya ".dll" - sonuçtaki derleme için derlenir. Derleme birimi, örneğin kısmi yeniden derleme yapmak istiyorsanız, ilgili olan en küçük birleştirilmiş birimi ifade eder. Java'da değişmiş sınıfları yeniden derlemeniz gerekiyor, .NET'te bir projeyi yeniden derlemelisiniz. Dikkat edin, fark çoğu durumda göz ardı edilebilir - her iki platform için derleyiciler, özellikle C++ ile karşılaştırıldığında, şaşırtıcı derecede hızlıdır. Java .class yeniden derlemesi için – Joey

+0

+1. Bunu hiç fark etmedim, ancak obj klasörüne baktıktan sonra, .NET'in her sınıf için nesne sonucunu ayırmadığı anlaşılıyor. Biri, yeniden derlemeyi azaltmak için sınıfları kitaplıklara ayırabilir, ancak Java her sınıfı açıkça ayırır. – Martheen

İlgili konular