Java Sanal Makinesi (JSM), Java platformunun nesne modülü (İng. object module) formatı olan class uzantılı sınıf dosyalarının belleğe yüklenip çalıştırılması için gereken hizmetleri sunan bir sistem programıdır ve temel görevinin sınıf dosyalarını yorumlamak olduğu söylenebilir. Ancak, JSM'ni salt bir yorumlayıcı olarak görmek büyük haksızlık olur. Zira, yorumlama ile birlikte JSM'nin şu görevleri de vardır.
- Belleğe yükleme ve çalıştırma sırasında güvenlik denetimlerinin yapılması
- Sınıf dosyalarının çalıştırılması esnasında yığın bellekte oluşabilecek çöplerin toplanması
- Yorumlamanın getirdiği çalışma hızındaki düşüşü azaltmak amacıyla kodun anında derleme kullanılarak daha hızlı çalıştırılması (seçimlik)
Yukarıdaki maddelerin ayrıntısına girmeden önce sınıf dosyalarının bazı özelliklerine değinmekte yarar olacaktır. Java platformunun standardize edilmiş nesne modülü formatı olan bu dosya çeşidinin DLL, EXE ve a.out formatlarındaki nesne modülü dosyalarına benzer işlev gördüğü söylenebilir. Nasıl ki, DLL, EXE ve a.out dosyaları üstbilgilerin yanı sıra programın çalıştırılacağı bilgisayarın makine kodu komutlarından oluşur, sınıf dosyaları da tanımlanan türün üstbilgilerine ek olarak Java platformunun makine kodu olarak düşünülebilecek Bytecode komutlarını içerir. Her iki durumda da, nesne modülünün oluşturulmasında kullanılan kaynak dosyanın hangi programlama dilinde yazıldığı bilinmez.
Örneğin, Pascal ile yazılmış bir dosyanın derlenmesi ile oluşturulmuş bir nesne modülü, daha sonra C ile yazılmış bir programın derlenmesiyle oluşturulan bir diğer nesne modülüyle bağlanarak kullanılabilir. Java platformu için geçerli olan benzer bir senaryo soldaki şekilde verilmiştir. Bu şekle göre, A şirketi tarafından Groovy kullanılarak yazılmış olan a.groovy dosyasının derlenmesi ile oluşturulan a.class ve B şirketi tarafından Jython kullanılarak üretilen b.py dosyasının derlenmesi ile oluşturulan b.class dosyaları, her iki şirketin de ortak müşterisi olan bir geliştiricinin yazdığı Prog.java içinden kullanılıyor. Dikkat edilecek olursa, şeklin müşteri tarafında bulunan sınıf dosyaları ilişkin kaynak dosyasının hangi dilde yazıldığını ele vermiyor.
Bütün bu koşutluklara karşın, sınıf dosyası formatı diğer nesne modülü formatlarından önemli farklılıklar gösterir. Öncelikle, herhangi bir mimariye ait makineler için işletim dizgesine bağlı olarak genelde birbirlerinden bağımsız geliştirilmiş ve birbirleriyle uyumsuz olan çeşit çeşit nesne modülü formatı bulunabilir. Bu, bir platform için oluşturulmuş nesne modülünün bir diğer platformda işe yaramayacağı anlamına gelir. Örneğin, IA32 mimarisinden işlemciye sahip bir bilgisayarda Linux altında oluşturulmuş a.out formatındaki bir nesne modülü, Windows XP altında doğrudan kullanılamayacaktır. Buna karşılık, formatı Java platformu ile birlikte standardize edilen sınıf dosyaları, 'nın bulunduğu bütün platformlarda çalıştırılabilecektir.
Bir diğer farklılık, JSM'nin ve sınıf dosyası formatının baştan itibaren güvenlik düşünülerek tasarlanmış olmasından kaynaklanır. Dosyanın üstbilgisi ve içeriği arasındaki tutarlılığın denetimi ile başlayan denetimleri kod bölümlerindeki Bytecode komutlarının geçerliliği ve doğruluğu denetlenerek yapılan denetimler izler. Örneğin, sınıf dosyasının ilk dört sekizlisinde sınıf dosyası formatınca öngörülen 0xCAFEBABE değerinin olup olmadığı, altalan ve metotlara dair üstbilgilerin dosya içeriğindeki durumla uyuşup uyuşmadığı kontrol edilir; sıçrama komutlarının içinde bulunulan metodun sınırları dışına çıkmadığı veya tanımlayıcılara tür uyumlu değerler sağlandığı garanti edilir.
Sınıf dosyalarının kod içeriğini oluşturan Bytecode'un yüksek düzey kavramlara yönelik özellikler taşıyan bir ara dil olması, bu dili bildik makine kodu dillerinden farklı kılar. Örneğin, Bytecode dilinde nesne yaratmak amacıyla kullanılabilecek komutların yanı sıra gerçekleştiriminin temelindeki dinamik iletimi olanaklı kılan komutlar da vardır; ayrıca, yazılım güvenilirliğini sağlamakta yararlanılabilecek ayrıksı durum kotarımı ile ilgili komutlar da JSM için derleyici yazmak isteyen programcıların işini kolaylaştırır. Makine dillerince doğrudan desteklenmeyen bu tür komutların varlığı, diğer türden nesne modülleri fiziksel olarak var olan bir makine üzerinde yorumlanarak çalıştırılırken, sınıf dosyalarının Bytecode dilinden haberdar olan bir soyut makine üzerinde yorumlanarak çalıştırılması gerekliliğini doğurur. Bunun beklenen bir sonucu olarak, yüksek düzey bir dilin doğrudan yorumlanmasına oranla daha hızlı olmasına karşın, sınıf dosyalarının çalışma hızı diğer nesne modüllerinden daha yavaş olacaktır. İşte tam bu noktada, JSM gerçekleştirimleri çalıştırılmakta olan kodun yaparak çalışma hızını yükseltmeye çalışırlar.
JSM'nin değineceğimiz son özelliği, programcıların daha hızlı kod geliştirmelerine olanak tanıyan birimidir. JSM'nin bir parçası olarak gerçekleştirilen çöp toplayıcı, yığın bellekte kullanılmaz hale gelen bölgelerin geriye döndürülmesini sağlar. Böylece, yığın belleğin yönetiminden azat edilmiş olan programcılar, zamanlarını çözmek istedikleri soruna harcayacak ve daha kısa sürede daha sağlıklı bir kodun gerçekleştirilmesi mümkün olacaktır.
Notlar
- ^ Sınıf dosyalarının programın çalışması esnasında bir başka bilgisayardan indirilerek yüklenmesi olasılığı düşünüldüğünde bunun bir zorunluluk olduğu görülecektir: Ya indirilmek istenen sınıf dosyası, kaynağında veya ağ üzerinde değiştirildikten sonra bilgisayarımıza indirilip yapması gerekmeyen şeyleri yapmaya çalışırsa?
- ^ Java Sanal Makinesi adı verilen bu soyut makine, donanımda gerçekleştirilmesi olanaklı olmakla birlikte, genelde bir yazılım olarak gerçekleştirilir.
Ayrıca bakınız
Dış bağlantılar
- Sınıf dosyası formatı 21 Mart 2011 tarihinde Wayback Machine sitesinde .
- Java Sanal Makinesi İndirme Sayfası 4 Şubat 2020 tarihinde Wayback Machine sitesinde .
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
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 nin bulundugu butun platformlarda calistirilabilecektir Bir diger farklilik JSM nin ve sinif dosyasi formatinin bastan itibaren guvenlik dusunulerek tasarlanmis olmasindan kaynaklanir 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 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 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 yaparak calisma hizini yukseltmeye calisirlar JSM nin deginecegimiz son ozelligi programcilarin daha hizli kod gelistirmelerine olanak taniyan 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 Notlar 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 Java Sanal Makinesi adi verilen bu soyut makine donanimda gerceklestirilmesi olanakli olmakla birlikte genelde bir yazilim olarak gerceklestirilir Ayrica bakinizBytecode Java programlama dili JSM dilleri BeanShell Clojure Groovy JRuby Jython ScalaDis baglantilarSinif dosyasi formati 21 Mart 2011 tarihinde Wayback Machine sitesinde Java Sanal Makinesi Indirme Sayfasi 4 Subat 2020 tarihinde Wayback Machine sitesinde