15 1 0 4000 1 https://haktanbozer.com.tr 300

JVM (Java Virtual Machine)

Java Sanal Makinesi (İngilizce adıyla Java Virtual Machine) Java platformunun nesne modülü (İngilizce adıyla 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ına verilen addır. Kısaca temel görevini sınıf dosyalarını yorumlamaktır. Ancak, JVM’i sadece salt bir yorumlayıcı değildir. Yorumlama ile birlikte JVM’in şu görevleri de vardır:

– Belleğe yüklemede ve çalıştırmada güvenlik denetimlerinin yapılması
– Sınıf dosyalarının çalıştırılması sırası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 açıklamadan önce sınıf dosyalarının bazı özelliklerine değinmek gerekli diye düşünüyorum. Java platformunun standardize edilmiş nesne modülü formatı olan bu dosya çeşitinin DLL, EXE ve a.out formatlarındaki nesne modülü dosyalarına benzer görev aldığı 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şuyorsa, 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 birbilerinden 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ı, Java Çalıştırma Ortamı’nın bulunduğu bütün platformlarda çalıştırılabilecektir.

Bir diğer farklılık, JVM’in ve sınıf dosyası formatının baştan itibaren güvenlik düşünülerek tasarlanmış olmasından kaynaklanır.[1] 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 çokbiçimliliğin 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 JVM 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.[2] 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, JVM gerçekleştirimleri çalıştırılmakta olan kodun anında derlenmesini yaparak çalışma hızını yükseltmeye çalışırlar.

JVM’in değineceğimiz son özelliği, programcıların daha hızlı kod geliştirmelerine olanak tanıyan çöp toplama birimidir. JVM’in 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.

Paylaş:
Ulam:Nedir?
Önceki Yazı
Plesk Panel İçin Nginx Gzip Ayarı
Sıradaki Yazı
Sahibinden Sitesinden GET ile Nasıl Ürün Satılır?