Light Mode

Icerige atla

Java sanal makinesi

Vikipedi, ozgur ansiklopedi
(JVM sayfasindan yonlendirildi)

Java Sanal Makinesi (JSM), Java platformunun nesne modulu (Ing. object module) formati olan class uzantili sinif dosyalarinin bellege yuklenip calistirilmasi icin gereken hizmetleri sunan bir sistem programidir ve temel gorevinin sinif dosyalarini yorumlamak oldugu soylenebilir. Ancak, JSM'ni salt bir yorumlayici olarak gormek buyuk haksizlik olur. Zira, yorumlama ile birlikte JSM'nin su gorevleri de vardir.

  • Bellege yukleme ve calistirma sirasinda guvenlik denetimlerinin yapilmasi
  • Sinif dosyalarinin calistirilmasi esnasinda yigin bellekte olusabilecek coplerin toplanmasi
  • Yorumlamanin getirdigi calisma hizindaki dususu azaltmak amaciyla kodun aninda derleme kullanilarak daha hizli calistirilmasi (secimlik)

Yukaridaki maddelerin ayrintisina girmeden once sinif dosyalarinin bazi ozelliklerine deginmekte yarar olacaktir. Java platformunun standardize edilmis nesne modulu formati olan bu dosya cesidinin DLL, EXE ve a.out formatlarindaki nesne modulu dosyalarina benzer islev gordugu soylenebilir. Nasil ki, DLL, EXE ve a.out dosyalari ustbilgilerin yani sira programin calistirilacagi bilgisayarin makine kodu komutlarindan olusur, sinif dosyalari da tanimlanan turun ustbilgilerine ek olarak Java platformunun makine kodu olarak dusunulebilecek Bytecode komutlarini icerir. Her iki durumda da, nesne modulunun olusturulmasinda kullanilan kaynak dosyanin hangi programlama dilinde yazildigi bilinmez.

Java platformunun nesne dosyasi formati olarak sinif dosyalari

Ornegin, Pascal ile yazilmis bir dosyanin derlenmesi ile olusturulmus bir nesne modulu, daha sonra C ile yazilmis bir programin derlenmesiyle olusturulan bir diger nesne moduluyle baglanarak kullanilabilir. Java platformu icin gecerli olan benzer bir senaryo soldaki sekilde verilmistir. Bu sekle gore, A sirketi tarafindan Groovy kullanilarak yazilmis olan a.groovy dosyasinin derlenmesi ile olusturulan a.class ve B sirketi tarafindan Jython kullanilarak uretilen b.py dosyasinin derlenmesi ile olusturulan b.class dosyalari, her iki sirketin de ortak musterisi olan bir gelistiricinin yazdigi Prog.java icinden kullaniliyor. Dikkat edilecek olursa, seklin musteri tarafinda bulunan sinif dosyalari iliskin kaynak dosyasinin hangi dilde yazildigini ele vermiyor.

Butun bu kosutluklara karsin, sinif dosyasi formati diger nesne modulu formatlarindan onemli farkliliklar gosterir. Oncelikle, herhangi bir mimariye ait makineler icin isletim dizgesine bagli olarak genelde birbirlerinden bagimsiz gelistirilmis ve birbirleriyle uyumsuz olan cesit cesit nesne modulu formati bulunabilir. Bu, bir platform icin olusturulmus nesne modulunun bir diger platformda ise yaramayacagi anlamina gelir. Ornegin, IA32 mimarisinden islemciye sahip bir bilgisayarda Linux altinda olusturulmus a.out formatindaki bir nesne modulu, Windows XP altinda dogrudan kullanilamayacaktir. Buna karsilik, formati Java platformu ile birlikte standardize edilen sinif dosyalari, Java Calistirma Ortami'nin bulundugu butun platformlarda calistirilabilecektir.

Bir diger farklilik, JSM'nin ve sinif dosyasi formatinin bastan itibaren guvenlik dusunulerek tasarlanmis olmasindan kaynaklanir.[1] Dosyanin ustbilgisi ve icerigi arasindaki tutarliligin denetimi ile baslayan denetimleri kod bolumlerindeki Bytecode komutlarinin gecerliligi ve dogrulugu denetlenerek yapilan denetimler izler. Ornegin, sinif dosyasinin ilk dort sekizlisinde sinif dosyasi formatinca ongorulen 0xCAFEBABE degerinin olup olmadigi, altalan ve metotlara dair ustbilgilerin dosya icerigindeki durumla uyusup uyusmadigi kontrol edilir; sicrama komutlarinin icinde bulunulan metodun sinirlari disina cikmadigi veya tanimlayicilara tur uyumlu degerler saglandigi garanti edilir.

Sinif dosyalarinin kod icerigini olusturan Bytecode'un yuksek duzey kavramlara yonelik ozellikler tasiyan bir ara dil olmasi, bu dili bildik makine kodu dillerinden farkli kilar. Ornegin, Bytecode dilinde nesne yaratmak amaciyla kullanilabilecek komutlarin yani sira cokbicimliligin gerceklestiriminin temelindeki dinamik iletimi olanakli kilan komutlar da vardir; ayrica, yazilim guvenilirligini saglamakta yararlanilabilecek ayriksi durum kotarimi ile ilgili komutlar da JSM icin derleyici yazmak isteyen programcilarin isini kolaylastirir. Makine dillerince dogrudan desteklenmeyen bu tur komutlarin varligi, diger turden nesne modulleri fiziksel olarak var olan bir makine uzerinde yorumlanarak calistirilirken, sinif dosyalarinin Bytecode dilinden haberdar olan bir soyut makine uzerinde yorumlanarak calistirilmasi gerekliligini dogurur.[2] Bunun beklenen bir sonucu olarak, yuksek duzey bir dilin dogrudan yorumlanmasina oranla daha hizli olmasina karsin, sinif dosyalarinin calisma hizi diger nesne modullerinden daha yavas olacaktir. Iste tam bu noktada, JSM gerceklestirimleri calistirilmakta olan kodun aninda derlenmesini yaparak calisma hizini yukseltmeye calisirlar.

JSM'nin deginecegimiz son ozelligi, programcilarin daha hizli kod gelistirmelerine olanak taniyan cop toplama birimidir. JSM'nin bir parcasi olarak gerceklestirilen cop toplayici, yigin bellekte kullanilmaz hale gelen bolgelerin geriye dondurulmesini saglar. Boylece, yigin bellegin yonetiminden azat edilmis olan programcilar, zamanlarini cozmek istedikleri soruna harcayacak ve daha kisa surede daha saglikli bir kodun gerceklestirilmesi mumkun olacaktir.

  1. ^ Sinif dosyalarinin programin calismasi esnasinda bir baska bilgisayardan indirilerek yuklenmesi olasiligi dusunuldugunde bunun bir zorunluluk oldugu gorulecektir: Ya indirilmek istenen sinif dosyasi, kaynaginda veya ag uzerinde degistirildikten sonra bilgisayarimiza indirilip yapmasi gerekmeyen seyleri yapmaya calisirsa?
  2. ^ Java Sanal Makinesi adi verilen bu soyut makine, donanimda gerceklestirilmesi olanakli olmakla birlikte, genelde bir yazilim olarak gerceklestirilir.

Ayrica bakiniz

[degistir | kaynagi degistir]

Dis baglantilar

[degistir | kaynagi degistir]