SORU
17 Ocak 2009, CUMARTESİ


Java'In Sanal Makine ve CLR

Soruyu takip eden bir tür olarak adlandırılan Java Sanal Makine nasıl karşı nasıl çalışır (önemli) bir farklılık ya da benzerlik nedir Differences between MSIL and Java bytecode?,.NET ÇerçeveOrtak Dil çalışma Zamanı (CLR) çalışır mı?

Ayrıca,.NET çerçeve"Sanal makine" veya bir sanal makine öznitelikleri var mı? CLR

CEVAP
26 Ocak 2009, PAZARTESİ


Her iki uygulamalar arasında bir çok benzerlik vardır (ve benim görüşüme göre: Evet, ikisi de "sanal makine").

Bir kere, bir yığın tabanlı ikisi de VM, kavramı ile "kayıtları modern bir CPU içinde görmeye alışık olduğumuz gibi" x 86 veya Power PC gibi. Değerlendirme tüm ifadelerin ((1 1) / 2) tarafından gerçekleştirilen iterek işlenen üzerine "yığın" ve sonra haşhaş o işlenen yığın kapalı olduğunda bir yönerge (eklemek, bölmek, vb) ihtiyaçları için tüketmek bu işlenen. Her talimat geri sonuçları yığına iter.

Bu uygun bir şekilde uygulamak için bir sanal makine, çünkü hemen hemen her CPU dünyanın bir yığın, ama numarasını kaydeder genellikle farklı (ve bazı kayıtları özel amaçlı ve her talimat beklediğini, basitçe farklı kayıtları, vs).

Eğer bir soyut makine modeli için gidiyoruz yani, yığın tabanlı sadece bir model için oldukça iyi bir yoldur.

Tabii ki, gerçek makineler o şekilde çalışmam. JİT derleyici "" bayt kodu operasyonları, aslında zamanlama gerçek CPU mümkün işlenen ve sonuçları içeren kaydeder. enregistration yapmaktan sorumlu yani

Yani, CLR ve JVM arasındaki en büyük ortak nokta sanırım.

Farklar için

İki uygulamaları arasında ilginç bir fark CLR bu tür parametrik uzmanlık uygulamak için genel türler oluşturmak için, ve sonra yönergeleri içerir. Bu yüzden, çalışma zamanında CLR Listesi<int> Liste< tamamen farklı bir tür olması;Dize> dikkate alır;.

Yorganın altında, kullandığı aynı MSIL tüm başvuru türü uzmanlık (yani bir List<String> kullandığı aynı uygulama olarak bir Liste<Object> ile farklı tip-atmalarını de API sınırları), ama her değer türü kullanır, kendi benzersiz uygulama (Liste<int> oluşturur tamamen farklı bir kod Listesi<çift>).

Java, genel türler salt bir derleyici numara. JVM hangi sınıflar tür tartışmalar yok düşüncesi var, ve zamanında parametrik uzmanlık gerçekleştiremedi.

Pratik bir bakış açısıyla, genel türler Java metotlar aşırı yüklenebilir. İki farklı yöntem, aynı adı, bir Liste kabul edip farklı sadece<Dize> Liste<Tarih> ile olmaz;. CLR parametrik türleri hakkında bildiği elbette, sorun yöntem genel tür uzmanlıklar aşırı kullanım var.

Günlük bazda, CLR ve en arasındaki fark işte fark bu JVM.

Diğer önemli farklar vardır:

  • CLR kilitler (C uygulanan# delegeler). JVM Java 8 beri destek kilitler.

  • CLR coroutines (C ile hayata# 'anahtar kelimesi) verim. JVM değil.

  • CLR sağlar kullanıcı kodu tanımlamak için yeni bir değer türleri (yapılar), JVM sağlar bir sabit toplama değer türleri (byte, short, int, long, float, double, char, boolean) ve sadece kullanıcıların tanımlamak için yeni bir referans tipleri (sınıfları).

  • CLR ve işaretçiler ilan manipülasyonu için destek sağlar. Bu JVM ve CLR iki katı kuşak kendi gibi çöp toplayıcı uygulamaları hafıza-yönetim stratejisi sıkıştırma kullanır, çünkü özellikle ilginç. Normal şartlar altında, bir katı sıkıştırma GC olan bir çok zor zaman işaretçileri, çünkü ne zaman hareket değeri bir bellek konumuna bir kez tüm işaretçiler (ve işaretçiler işaretçiler) geçersiz hale gelir. Ama bir CLR "" geliştiriciler içinde CLR bazı göstericiler taşımak için izin verilmez kod bloğu bildirebilirsiniz. mekanizması bağlantılarını sağlar Çok kullanışlı.

  • En büyük birim kodu JVM ya da bir 'paket' olarak gösterdiği 'korumalı' anahtar kelime ya da belki bir KAVANOZ (yani Java Arşivi), kanıtladığı mümkün belirttiğiniz bir kavanoza sınıf ve tedavi gibi bir klasörün kodu. CLR, sınıfları toplanan 'derlemeler' ve CLR sağlar mantık, muhakeme ve manipüle derlemeler (hangi yüklendi "uygulama etki alanları", sağlama alt uygulama düzeyinde sanal bellek ayırma ve kod yürütme).

  • CLR koduna biçimi (MSIL yönergeleri ve meta oluşan) JVM daha az Yönerge türleri vardır. JVM, her benzersiz işlem (iki int değerleri ekleyin, iki kayan noktalı değişkenler ekleme, vb.) kendine özgü bir talimat var. CLR, MSIL yönergeleri polimorfik (iki değer ekleyin) ve JİT derleyici işlenen türlerini belirlemek ve uygun makine kodunu oluşturmak için sorumludur. Tercihen stratejisi olan, ama, bilmiyorum. Hem ticaret-off var. Sıcak JİT derleyici için JVM, kullanımı basit bir kod nesil mekanizması (değil tesbit etmek işlenen türleri, çünkü onlar zaten kodlanmış talimat), ama bu demek ihtiyacı daha karmaşık bir bayt biçimi, daha fazla talimat türleri.

Yaklaşık on yıldır Java (JVM hayran) şimdi kullanıyorum.

Ama, benim görüşüme göre, CLR şimdi üstün uygulanması, hemen hemen her şekilde.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • discokatze

    discokatze

    23 EYLÜL 2009
  • Dive In

    Dive In

    17 Temmuz 2013
  • NextGenWindows

    NextGenWindo

    8 Kasım 2011