Java Nedir? Nasıl Çalışır?

SoruCevap

Yeni Üye
Çözümler
1
Tepkime
57
Yaş
36
Coin
256,936
Java çok fazla olanak sunan, yapabildiklerinin insanın hayalleriyle sınırlı olduğu web platformu için vazgeçilmez bir açık kaynak kodlu yazılım platformudur Java Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye baslanmış gerçek nesneye yönelik, platform bağımsız, yüksek performanslı, çok işlevli, yüksek seviye bir program dilidir Java ilk çıkktığında daha çok küçük cihazlarda kullanılmak için tasarlanmış ortak bir platform dili olarak düşünülmüş Ancak bakmışlar ki platform bağımsızlığı özelliği C ve C++’tan çok daha üstün ve güvenli bir yazılım geliştirme ve işletme ortamı sunuyor, hemen her yerde kullanılmaya başlanmış Şu anda özellikle kurumsal alanda ve mobil cihazlarda son derece popüler olan java, özellikle J2SE 14 ve 15 sürümü ile masaüstünde de gücünü arttırmayı hedefliyor Java’nın ilk sürümü olan Java 10(1995) Java Platform 1 olarak adlandırıldı ve tasarlama amacına uygun olarak küçük boyutlu ve kısıtlı özelliklere sahipti Daha sonra platformun gücü gözlendi ve tasarımında büyük degişiklikler ve eklemeler yapıldı Bu büyük degişikliklerden dolayı geliştirilen yeni platforma Java Paltform 2 adı verildi ama versiyon numarası 2 yapılmadı, 12 olarak devam etti Bu bahar cıkacak Java 15, gecen 12, 13 ve 14 sürümlerinin ardından en çok gelişme ve degişikliği barındıran sürüm olacak
Nasıl Çalışır
Bir java yazılımı şu şekilde geliştirilir:
Programcı java kodunu yazar Bu kod bir java derleyicisi ile derlenir Sonuçta bytekod adı verilen bir tür makine kodu ortaya çıkar Platform bağımsızlığını saglayan şey bytekod’dur Çünkü bir kere bytekod oluştuktan sonra yazılım tüm işletim sistemlerinde çalışabilir Bu bytekod Java Virtual Machine(Java Sanal Makinesi) tarafından adım adım işletilir Aşağıda java ve C++ kodunun geçirdiği aşamalar gösterilmiştir
Java Kodunun Yazılması
Java nesneye yönelik bir dil olduğundan tüm yazılım sınıflar ve nesneler üzerinden yürütülür Sınıflar uygulamadaki nesnelerin tanımlandığı kod parçalarıdır Java’da her bir sınıf bir dosya içerisinde yer alır Dosyaların uzantıları java şeklindedir Dosya adı ise içinde tanımlanan sınıf ile aynıdır Örneğin, BenimSinifjava gibi
Derleme
Derleyici kısaca herhangi bir editor ile yazılan java kaynak kodlarını(yani java uzantili siniflarin yer aldigi dosyalari) java sanal makinesinin çalıştırabileceği bir tür makine dili(assembler) olan Bytecode’a dönüştürür Bu dönüştürülen bytekod ise class dosyaları içerisinde saklanır Java kodunu derlemek için bir java derleyicisine ve java kütüphanelerine ihtiyacınız var Şu anda iki derleyici yaygın olarak kullanılmaktadır Bir tanesi Sun’ın SDK’si ile birlikte gelen javac diğeri ise IBM’in açik kodlu derleyicisi jikes Benim yaygın olarak kullandığım Jikes, cok hızlı derlemesi ile ünlü olsa da en son java yazılımlarını derlemek için javac’e ihtiyaç duyulabilir Ayrıca linux altında derleme yapmak için gnu lisansi ile geliştirilen açık kodlu Gnuj kullanılabilir Derleyici ve kütüphanelerin(Java API) bulunduğu uygulamaya “J2SE SDK adı verilmiştir
Java Sanal Makinesi
Java sanal makinesi donanımdan bağımsız yazılım geliştirme ihtiyacına cevap verme amacıyla geliştirilen bir teknolojidir Java’nın temel felsefesi olan “bir kere yaz, her yerde çalıştır sanal makine sayesinde varolmuştur Sanal makineyi bir yönden bir tür hayali bir mikroişlemci gibi düşünebiliriz Gerçek tüm mikroişlemciler(Intel Pentium, AMD Athlon, Sun Sparc vs) belirli bir grup komutu işlemek üzere tasarlanmıştır Bu komutlara işlemcinin komut kümesi adı verilir Örnegin x86 komut kümesi gibi Tüm yazılımlar çalışabilmek için önce bu komut kümesine dönüştürülür, daha sonra işlemci bu komutları sıra ile gerçek işlemci komutlarına dönüştürüp işletir Java sanal makinesi de Bytekod komut kümesini tıpkı işlemci gibi adım adım işletir Java’nın interpreted bir dil olarak adlandırılmasının nedeni budur Bytekod ilkel işlemlerin yanında(ilkel işlemler, mikroişlemci seviyesi komutlardır, aritmetik işlemler, bit işlemleri, bellek ve yığın işlemleri vs) sanal makinenin üzerinde çalıştığı işletim sistemine yönelik işlemler de barındırır Bu sayede Java Virtual Machine yazıcı, seri port, grafik, dosya servisi, ağ bağlantısı gibi yazılım ve donanım servislerine erişim yapabilir
Java’nın doğrudan bytecode çalıştırması performansının düşük olabileceği izlenimini verebilir Ancak, JVM tasarımı geçen 10 yılda çok değişmiş ve geliştirilmiştir Şu anda java’nın performansı çoğu alanda C++’in performansına yakın bir seviyededir ve işlemci hızı ve bellek miktarının her geçen yıl katlanarak artması ile performans konusu çoğu uygulamada artık ikinci planda kalmıştır Aşağıda çeşitli platformlar için java’nın çalışması basit blok şema olarak gösterilmiştir Eğer sözkonusu dil C++ olsaydı üç ayrı kod ya da kodda üç ayrı obje dosyası oluşturulması gerekirdi ve çoğu uygulamada C++ projesi sadece tek platforma destek verirdi(win32 gibi)

Java ile ilgili yazılarda karşılaşılabilecek bazı kavramlar:
Hot Spot
Java sanal makinesi HotSpot adı verilen özel bir teknolojiyi içinde barındırır HotSpot yani sıcak nokta, bir yazılımda sürekli olarak tekrarlanan ve üzerinden geçilen kod bölümlerine verilen bir isimdir Java sanal makinesi bir kod çalışmaya başladıktan sonra sıklıkla kullanılan kod bloklarını gözler ve bir süre sonra bu bytecode bloklarının çalışılan sistemdeki gerçek işlemci komut karşılıklarını bir tür cep belleğe yazar ve zaman ilerledikçe artık bytekod üzerinden değil doğrudan sistemin öz komutlarını kullanarak yazılımın o bölümlerini işletmeye başlar Bu şekilde ciddi bir performans avantajı sağlanmıştır
JIT
Java ilk çıktığında bytecode işletme hızı çok iyi değildi Yerine göre sistemin öz yazılımlarından 510 kat yavaş çalışıyordu Bu nedenle bazı yazılım geliştirme şirketleri JIT yani Justintime compile(aninda derleme) araçları üretmeye başladılar Yapılan şey bytekodu sanal makinenin kurulu olduğu gerçek sistemin diline anında derleme yaparak dönüştürmesiydi Bu sayede performansta ciddi artışlar sağlandı Ama 2000 yılından sonra HotSpot teknolojisinin gelişmesi ile JIT’in işlevi VM içinde yer almaya başlamış, işlemci hızı ve bellek miktarının dramatik biçimde artmasi ile dis JIT yazılımları popülerliğini kaybetmiştir Bugün halen bir kaç ürün pazarda bulunsa da genellikle bu yöndeki ihtiyaç yok olmuş gibi gözükmektedir
Java API
Java API, java yazılımlarında kullanılan yazlım kütüphanelerine genel olarak verilen isimdir Java API ile disk, grafik, ag, veri tabanı, güvenlik gibi yüzlerce konuda kullanıcılara erişim imkani sunulur Java API J2SDK’nin bir parçasıdır
Garbage Collector(Çöp Toplayıcı)
Çöp toplayıcı java’nın en belirgin özelliklerinden birisidir C++, C gibi dillerin en büyük handikaplarından birisi dinamik bellek yönetimidir Yazılımda işaretci(pointer) kullanarak dinamik olarak bellek ayırdıktan sonra o bellek ile işiniz bittiğinde mutlaka ayrılan belleği bellek yöneticiye özel metodlar yardımıyla(delete, destructor vs) iade etmeniz gerekir Yoksa bellek sızıntısı(Memory Leak) oluşur ve bu bir süre sonra yazılımın ve işletim sisteminin beklenenden farklı davranmasına yol açar Bugünün tüm büyük C ve C++ yazılımları az da olsa bellek sızıntısı içerir(işletim sistemleri dahil) Sızıntıların tespiti oldukça güçtür ve bulunması zor hatalara yol açar Çöp toplayıcı sayesinde Java’da bir nesne oluşturulduktan sonra o nesne ile işiniz bittiğinde hiçbir şey yapmanız gerekmez Sanal makine akıllı bir biçimde kullanılmayan bellek bölümlerini belirli aralıklarla ya da adaptif metodlarla sistemi otomatik olarak temizler ve sisteme iade eder Bu işleme çöp toplama, ya da İngilizce garbage collection adı verilir Çöp toplama sistemlerinin yapısı oldukça karmaşıktır ve geçen yıllar içinde büyük gelişmeler kaydedilmiştir Çöp toplayıcının varlığı java’da bellek sızıntısı olmayacağı anlamına gelmez, ama bellek sızıntıları daha ender olarak ve farklı şekillerde karsınıza cıkar ve genellikle tedavi edilmesi daha kolaydır Sun’ın çöp toplayıcısı hakkında detaylı bilgi için şuraya, IBM’inki için şuraya bakabilirsiniz
Jar
Jar, aslında bir tür sıkıştırma formatıdır Jar ile derlenen java kodları ile oluşan yazılımın paketlenip taşınması kolay bir hale getirilir Jar dosyaları temelde bytekod bloklari içerir Jar dosyaları genellikle kütüphane oluşturmada ya da uygun biçimde hazırlanırsa işletim sisteminden dogrudan çalıştırılabiliecek bir şekilde kullanılabilir(Executable jar, işletilebilir jar) Jar dosyalarının içeriğini sıkıştırma yazılımları ya da java yazılım geliştirme araçları ile inceleyebilirsiniz Java 15 ile yeni bir tür jar oluşturma metodu da kullanıma girecek Pack200 adı verilen hipercompression algoritmasi ile jar dosyaları 8 kata varan oranlarda daha az yer kaplayacak Bunun özellikle uzak uygulamaların kullanımını ciddi biçimde kolaylaştırması bekleniyor
AWT ve Swing
AWT, ilk java ile birlikte geliştirilen temel grafik arayüz oluşturma kütüphanesine verilen isimdir Ancak Java 2 platformu ile birlikte AWT’nin yetersiz görülmüs ve çok daha geniş ve gelişmiş özelliklere sahip Swing kütüphanesi sisteme eklenmiştir Özellikle çok platform destekleyen yazılımlarda kullanıcı arayüzü geliştirme aracı olarak swing halen önemini korumaktadir Swing, önceleri işletim sisteminin kullandığı donanım grafik hızlandırma araçlarını kullanmadğından yavaşlığı ile eleştirilere hedef olmuştu Özellikle Java 14 ile Swing, hem genel olarak sanal makinenin hızlanması ve kısmen donanım hızlandırmayı kullanması ile bu kötü söhretinden sıyrılmaya başladı Java 15 ile donanım, özellikle OpenGL kullanımı ve yeni arayüz gösterim şekli ile java’nin masaüstü uygulama geliştirmede popülerleşmesi bekleniyor AWT halen swingin bir alt katmanında, temel 2 boyutlu grafik işlemlerinde kullanılmaya devam ediyor
SWT
SWT swing’e bir alternatif olarak IBM tarafindan geliştirilen bir gösterim sistemidir Swing’den en büyük farkı çalıştığı işletim sisteminin grafik kütüphanesi ve komutlarını kullanmasıdır Bu nedenle SWT uygulamaları Swing’e göre çogu yerde daha hızlı ve işletim sistemindeki diğer uygulamaları andıran bir şekilde calışmasını sağlar Ancak yapı itibari ile SWT kullanımı Swing kadar efektif olamayabiliyor(özellikle olay mekanizması, tablo ve ağaç yapılarındaki yavaşlığı, ayrıca linux performansı ile SWT eleştirilmiştir) Swing’in Java 15 ile performans açığını kapatacağı idda edilse de SWT’nin de artık java camiasında kabul görmüş bir sistem olduğu aşikardır SWT’nin dezavantajı ise java’nın bir parçası olmamasıdır Yani SWT uygulamaları SWT kütüphanesi ile birlikte dağıtılmaktadır En bilinen SWT uygulaması ünlü java yazılım geliştirme aracı Eclipse’tir Bununla birlikte son yıllarda Swing ile profesyonel derecede arayüze sahip masaüstü yazılımları da ortaya çıkmıştır Sonuçta herşey yazılımcının aracı ne kadar efektif kullandığına bakıyor
Applet
Applet, uzaktaki sistem üzerinden indirilip internet tarayıcı üzerinde çalıştırılabilen java uygulamalarına verilen isimdir Java’nın son kullanıcılar tarafindan tanınması applet sayesinde olmuştur dersek yanlış olmaz herhalde Applet’ler sisteme zarar veremeyecek bir şekilde tasarlanmıştır ve bugün özellikle oyun sitelerinde halen yaygın olarak kullanılmaktadır İçerisinde applet olan bir sayfayı açmaya çalıştığınızda tarayıcınız otomatik olarak java sanal makinesini çalıştırıp ekranın applet’e ayrılan bölümünde uygulamanın çalışmasını sağlar
WebStart
Webstart teknolojisi Windows ve Linux işletim sistemlerinin baş belası olan uygulama kurulum, güncelleme ve silme dertlerine deva olmak üzere tasarlanmış bir sistemdir Özellikle Java 15 ile daha yaygın kullanılmaya baslayacagı tahmin edilen webstart teknolojisi kısaca yazılımların uzaktan yerel sisteme güvenli olarak kurulmasını ve korumalı bir alanda çalıştırılmasını sağlar Appletlerin bir sonraki adımı olarak görülebilir Bir webstart uygulamasını kurmak için internet üzerindeki özel bir bağlantıya tıklamak yeterli Sistem otomatik olarak webstart sistemini çalıştırıp yazılımı java cep belleğine indirir İsterseniz masaüstüne kısayol koymasını da sağlar Daha sonra sistem offline ya da online olsa bile uygulama çalıştırılabilir ve uzaktaki yazılım güncellendiğinde otomatik olarak yerel makinedeki yazılımın da güncellenmesi sağlanabilir Kullanıcının özel olarak izin vermesi halinde uygulama yerel sisteme erişim hakkı kazanabilir Aksi taktirde webstart uygulamaları sisteme yazma işlemi gerçekleştiremezler(yani virus ve zararlı yazılım tehlikesini son derece aza indirger)
Java hangi dilde yazildi?
Javanın çekirdek kısmı yani sanal makinenin C++ ve belki bazı yerlerde doğrudan assembler kullanılarak yazıldığını sanıyorum Bu hükmü java bug sayfalarındaki örnek kodlara bakarak verdim Java kütüphanelerinin büyük kısmı ise java ile yazılmıstır
Java Her yerde kullanilabilir mi?
Hayır, java özellikle donanım sürücüsü geliştirme, işletim sistemi seviyesi yazılımlar, bazı özel grafik yazılımları, yüksek hızlı 3 boyutlu grafikli oyunlarda kullanmak için uygun değildir Java 15 ve sonraki sürümlerde openGL desteği ile 3 boyutlu oyun uygulamalarında daha fazla kullanılması umuluyor
Neden Java?
Bu soruya kişisel olarak cevap vereceğim, su nedenleri gosterebilirim;
En önemlisi platform bağımsız Herhangi bir yerde yazdığım yazılımı tek satır bile değiştirmeden tüm işletim sistemlerinde ve donanımlarda çalıştırabiliyorum Bu özelliği Net’i benim için safdışı ediyor Güvenli kod yazımı Pointer kullanımı, bellek sızıntılari, hedef satırları, karmaşık derleme sistemleri, işletim sistemi hatta derleyici bağımlı kütüphanelerden bıkmış birisi olarak java’yı günümüzdeki haliyle C, C++’a bin kere tercih ederim Nesneye yönelik Bir kere alıştıktan ve kavradıktan sonra bir daha terkedemeyeceğiniz nesneye yönelik yazılım geliştirmenin güzel bir gerçeklemesidir Bu nedenle kriptik anlasılmaz script dilleri, hem ondan hem bundan diyen C++ gibi hibrit dilleri ve C gibi alt seviye bir işkence aletine karşı java’yı tercih ediyorum Yüksek performans Script dilleri geri dursun Basitlik, az komut sayısı ve konulara çoğunlukla aynı yönden yazılması ile ögrenilmesi C++ ve C’ya göre kolay olduğundan tercih ediyorum Seçenek, birden fazla sanal makine, SDK ve uygulama sunucu geliştirici sayesinde tek geliştiriciye bağımlı değilim Java’nın geliştirilmesi her ne kadar Sun’in denetiminde yapılsa da JCP adı verilen bir organizasyon ile diğer şirketler de java’nın geliştirilmesine doğrudan katkıda bulunmaktadır Ayrıca java’yı karmaşık bulanlar daha kolay anlaşılabilir BeanShell, Jython, Rubby, Groovy gibi JVM uzerinde çalışabilecek script dillerini kullanabilir Geliştirme ortamlari, Java ile yazılım geliştirebileceğiniz ticari ya da bedava ve açık son derece güçlü ve cok sayıda yazılım geliştirme ortamları mevcut Üstelik tüm platformlarda Olgunluk, Java geçen on yılda havanda iyice dövülerek olgun bir hale geldi Şu anda çeşitli java sürümleri bankalar, askeri sistemler hatta uzay araclarında kullanılmaya uygun olarak görülmektedir Kurumsal alandaki uygulamaların büyük çoğunda Java tercih edilmektedir Net’in bu aşamaya gelmesi icin daha kırk fırın ekmek yemesi gerekir ve genellikle ciddi bir yatırımcının zaman kaybına tahammülü yoktur Açık kod, java ile gerçekleştirilen açık kodlu proje ve framework sayısı on binlerle ifade ediliyor Hemen her ticari uygulamanın bir açık kodlu karşılığını bulmanız mümkün Destek, Java şu anda IBM, Oracle, Sun, Bea gibi dev şirketler tarafindan desteklenmektedir Bu şirketlerin hiç birisi Net yoluna gideceklerine dair en ufak bir işaret vermemişlerdir O nedenle java’nın geleceğini aydınlık olarak görüyorum Eğer iyi derecede java ve yazılım geliştirme bilirseniz iyi ve ciddi bir iş bulma şansınız diğer dillerden daha yüksektir Yazar: Ahmet AAkın
 
Üst Alt