Bu yazida java'nin basitce ne oldugunu, nasil calistigini ve java ileiliskili bazi kavramlari basitce ve bildigim kadari ile aciklamayacalisacagim
On bilgi.Java Sun microsystems muhendislerinden James Gosling tarafindangelistirilmeye baslanmis gercek nesneye yonelik, platform bagimsiz,yuksek performansli, cok islevli, yuksek seviye, interpreted[adim adimisletilen] bir dildir (son ozellik, yani adim adim isletilen konusunaaciklik getirilecek).
Java ilk ciktiginda daha cok kucuk cihazlarda kullanilmak icintasarlanmis ortak bir platform dili olarak dusunulmus. Ancak bakmislarki platform bagimsizligi ozelligi C ve C++'tan cok daha ustun veguvenli bir yazilim gelistirme ve isletme ortami sunuyor, hemen heryerde kullanilmaya baslanmis. Su anda ozellikle kurumsal alanda vemobil cihazlarda son derece populer olan java, ozellikle J2SE 1.4 vegelecek 1.5 surumu ile masautunde de gucunu arttirmayi hedefliyor.Java'nin ilk surumu olan Java 1.0 (1995) Java Platform 1 olarakadlandirildi ve tasarlama amacina uygun olarak kucuk boyutlu ve kisitliozelliklere sahipti. Daha sonra platformun gucu gozlendi ve tasarimindabuyuk degisiklikler ve eklemeler yapildi. Bu buyuk degisikliklerdendolayi gelistirilen yeni platforma Java Paltform 2 adi verildi amaversiyon numarasi 2 yapilmadi, 1.2 olarak devam etti. Bu bahar cikacakJava 1.5, gecen 1.2, 1.3 ve 1.4 surumlerinin ardindan en cok gelisme vedegisikligi barindiran surum olacak. (java konusunda temel bilgi icinsuraya bakabilirsiniz)
Java nasil calisir?Bir java yazilimi su sekilde gelistirilir:
* Programci java kodunu yazar.
* Bu kod bir javaderleyicisi ile derlenir. Sonucta bytekod adi verilen bir tur makinekodu ortaya cikar. Platform bagimsizligini saglayan sey bytecode'dir.Cunku bir kere bytecode olustuktan sonra yazilim tum isletimsistemlerinde calisabilir.
* Bu byte kod Java virtual Machine (Java Sanal Makinesi) tarafindanadim adim isletilir. Asagida java ve C++ kodunun gecirdigi asamalargosterilmistir.

Simdi bu adimlari iyice bir inceleyelim
Java kodunun yazilmasi.java nesneye yonelik bir dil oldugundan tum yazilim siniflar venesneler uzerinden yurutulur. Siniflar uygulamadaki nesnelerintanimlandigi kod parcalaridir. Java'da her bir sinif bir dosyaicerisinde yer alir. Dosyalarin uzantilari .java seklindedir. Dosya adiise icinde tanimlanan sinif ile aynidir. Ornegin, BenimSinif.java gibi.
Derleme
Derleyici kisaca herhangi bir editor ile yazilan java kaynak kodlarini(yani .java uzantili siniflarin yer aldigi dosyalari) java sanalmakinesinin calistirabilecegi bir tur makine dili (assembler) olanBytecode'a donusturur. Bu donusturulen bytekod ise (.class ) dosyalariicerisinde saklanir. Java kodunu derlemek icin bir java derleyicisineve java kutuphanelerine ihtiyaciniz var. Su anda iki derleyici yayginolarak kullanilamktadir. Bir tanesi Sun'in SDK'si ile birlikte gelenjavac. digeri ise IBM'in acik kodlu derleyicisi jikes. Benim yayginolarak kullandigim Jikes, cok hizli derlemesi ile unlu olsa da en sonjava yazilimlarini derlemek icin javac'ye ihtiyac duyulabilir. Ayricalinux altinda derleme yapmak icin gnu lisansi ile gelistirilen acikkodlu Gnuj kullanilabilir. Derleyici ve kutuphanelerin bulundugu (JavaAPI) uygulamaya "J2SE SDK" adi verilmistir.
Calistirma ve Java sanal makinesi.
Sanal makine donanimdan bagimsiz yazilim gelistirme ihtiyacina cevapverme amaciyla gelistirilen bir teknolojidir. Java'nin temel felsefesiolan "bir kere yaz, her yerde calistir" sanal makine sayesindevarolmustur. Sanal makineyi bir yonden bir tur hayali bir mikroislemcigibi dusunebiliriz. Gercek tum mikroislemciler (Intel Pentium, AMDAthlon, Sun Sparc vs) belirli bir grup komutu islemek uzeretasarlanmistir. Bu komutlara islemcinin komut kumesi adi verilir.Ornegin x86 komut kumesi gibi. Tum yazilimlar calisabilmek icin once bukomut kumesine donusturulur, daha sonra islemci bu komutlari sira ilegercek islemci komutlarina donusturup isletir. Java Sanal makinesi deBytekod komut kumesini tipki islemci gibi adim adim isletir. Java'nininterpreted bir dil olarak adlandirilmasinin nedeni budur. Bytekodilkel islemlerin yaninda (ilkel islemler, mikroislemci seviyesikomutlardir, aritmetik islemler, bit islemleri, bellek ve yiginislemleri vs.) sanal makinenin uzerinde calistigi isletim sistemineyonelik islemler de barindirir. Bu sayede Java Virtual Machine yazici,seri port, grafik, dosya servisi, ag baglantisi gibi yazilim ve donanimservislerine erisim yapabilir.
Java'nin dogrudan bytecode calistirmasi performansinin dusukolabilecegi izlenimini verebilir. Ancak, JVM tasarimi gecen 10 yildacok degismis ve gelistirilmistir. Su anda java'nin performansi cogualanda C++'in performansina yakin bir seviyededir ve islemci hizi vebellek miktarinin her gecen yil katlanarak artmasi ile performanskonusu cogu uygulamada artik ikinci planda kalmistir. Asagida cesitliplatformlar icin java'nin calismasi basit blok sema olarakgosterilmistir. Eger sozkonusu dil C++ olsayid uc ayri kod yada koddauc ayri #ifdef vs tanimi, uc ayri obje dosyasi olusturulmasi gerekirdive cogu uygulamada C++ projesi sadece tek platforma destek verirdi(win32 gibi)

Java ile ilgili yazilarda karsilasabileceginiz bazi kavramlar:
Hot Spot teknolojisi:Java sanal makinesi HotSpot adi verilen ozel bir teknolojiyi icindebarindirir. HotSpot yani sicak nokta , bir yazilimda surekli olaraktekrarlanan ve uzerinden gecilen kod bolumlerine verilen bir isimdir.Java sanal makinesi bir kod calismaya basladiktan sonra sIkliklakullanilan kod bloklarini gozler ve bir sure sonra bu bytecodebloklarinin calisilan sistemdeki gercek islemci komut karsiliklarinibir tur cep bellege yazar ve zaman ilerledikce artik byte kod uzerindendegil dogrudan sistemin oz komutlarini kullanarak yazilimin obolumlerini isletmeye baslar. Bu sekilde ciddi performans avantajisaglanmistir.
JITJava ilk ciktiginda bytecode isletme hizi cok iyi degildi. yerine goresistemin oz yazilimlarindan 5-10 kat yavas calisiyordu. Bu nedenle baziyazilim gelistirme sirketleri JIT yani Just-in-time compile, "anindaderleme" araclari uretmeye basladilar. Yapilan sey byte kodu sanalmakinenin kurulu oldugu gercek sistemin diline aninda derleme yaparakdonusturmesiydi. Bu sayede performansta ciddi artislar saglandi. Ama2000 yilindan sonra HotSpot teknolojisinin gelismesi ile JIT'in isleviVM'icinde yer almaya baslamis, islemci hizi ve bellek miktarinindramatik bicimde artmasi ile dis JIT yazilimlari populerliginikaybetmistir. Bugun halen bir kac urun pazarda bulunsa da genellikle buyondeki ihtiyac yok olmus gibi gozukmektedir.
Java APIJAva API, yava yazilimlarinda kullanilian yazilim kutuphanelerine genelolarak verilen isimdir. Java API ile disk, grafik, ag, veri tabani,guvenlik gibi yuzlerce konuda kullanicilara erisim imkani sunulur. JavaAPI J2SDK'nin bir parcasidir.
Cop toplayici (Garbage Collector)Cop toplayici java'nin en belirgin ozelliklerinden birisidir. C++, Cgibi dillerin en buyuk handikaplarindan birisi dinamik bellekyonetimidir. yazilimda isaretci (pointer) kullanarak dinamik olarakbellek ayirdiktan sonra o bellek ile isiniz bittiginde mutlaka ayrilanbellegi bellek yoneticiye ozel metodlar yardimiyla (delete, destructorvs.) iade etmeniz gerekir. Yoksa bellek sizintisi (Memory Leak) olusurve bu bir sure sonra yazilimin ve isletim sisteminin beklenenden farklidavranmasina yol acar. Bugunun tum buyuk C ve C++ yazilimlari az daolsa bellek sizintisi icerir (isletim sistemleri dahil). sizintilarintespiti oldukca guctur ve bulunmasi zor hatalara yol acar. Coptoplayici sayesinde Java'da bir nesne olusturulduktan sonra o nesne ileisiniz bittiginde hic bir sey yapmaniz gerekmez. Sanal makine akillibir bicimde kullanilmayan bellek bolumlerini belirli araliklarla ya daadaptif metodlarla sisteme otomatik olarak temizler ve sisteme iadeeder. Bu isleme Cop toplama, ya da garbage collection adi verilir. Coptoplama sistemlerinin yapisi oldukca karmaXXXXXX ve gecen yillar icindebuyuk gelismeler kaydedilmistir. Cop toplayicinin varligi java'da bellksizintisi olmayacagi anlamina gelmez, ama bellek sizintilari daha enderolarak ve farkli sekillerde karsiniza cikar ve genellikle tedaviedilmesi daha kolaydir. Sun'in cop toplayicisi hakkinda detayli bilgiicin suraya, IBM'inki icin şuraya bakabilirisniz
Jar: Jar, aslinda bir tur sIkistirma formatidir. Jar ile derlenen javakodlari ile olusan yzilimin paketlenip tasinmasi kolay bir halegetirilir. Jar dosyalari temelde bytekod bloklari icerir. Jar dosyalarigenellikle kutuphane olusturmada ya da uygun bicimde hazirlanirsaisletim sisteminden dogrudan calistirilabiliecek bir sekildekullanilabilir (Executable jar, isletilebilir jar) jar dosyalarininicerigini sIkisitrma yazilimlari ya da java yazilim gelistirme araclariile inceleyebilirsiniz. Java 1.5 ile yeni bir tur jar olusturma metoduda kullanima girecek. Pack200 adi verilen hiper-compression algoritmasiile jar dosyalari 8 kata varan oranlarda daha az yer kaplayacak. Bununozellikle uzak uygulamalarin kullanimini ciddi bicimde kolaylastirmasibekleniyor.
AWT ve SwingAWT, ilk java ile birlikte gelistirilen temel grafik arayuz olusturmakutuphanesine verilen isimdir. Ancak Java 2 platformu ile birlikteAWT'nin yetersiz gorulmus ve cok daha genis ve gelismis ozellikleresahip Swing kutuhanesi sisteme eklenmistir. Ozellikle cok platformdestekleyen yazilimlarda kullanici arayuzu gelistirme araci olarakswing halen onemini korumaktadir. Swing, onceleri isletim sistemininkullandigi donanim grafik hizlandirma araclarini kullanmadigindanyavasligi ile elestirilere hedef olmustu. Ozellikle Java 1.4 ile Swing,hem genel olarak sanal makinenin hizlanmasi ve kismen donanimhizlandirmayi kullanmasi ile bu kotu sohretinden siyrilmaya basladi.Java 1.5 ile donanim, ozellikle OpenGL kullanimi ve yeni arayuzgosterim sekli ile java'nin masaustu uygulama gelistirmedepopulerlesmesi bekleniyor. AWT halen swingin bir alt katmaninda, temel2 boyutlu grafik islemlerinde kullanilmaya devam ediyor.
SWTSWT swing'e bir alternatif olarak IBM tarafindan gelistirilen birgosterim sistemidir. Swing'den en buyuk farki calistigi isletimsistminin grafik kutuphanesi ve komutlarini kullanmasidir. Bu nedenleSWT uygulamalari Swing'e gore cogu yerde daha hizli ve isletimsistemindeki diger uygulamalari andiran bir sekilde calismasini saglar.Ancak yapi itibari ile SWT kullanimi Swing kadar efektif olamayabiliyor(ozellikle olay mekanizmasi, tablo ve agac yapilarindaki yavasligi,ayrica linux performansi ile SWT elestirilmistir.) Swingin Java 1.5 ileperformans acigini kapatacagi iddia edilse de SWT'nin de artik javacamiasinda kabul gormus bir sistem oldugu asikardir. SWT'nindezavantaji ise java'nin bir parcasi olmamasidir. yani SWT uygulamalariSWT kutuphanesi ile birlikte dagitilmaktadir. En bilinen SWT uygulamasiunlu java yazilim gelistirme araci Eclipse'tir. Bununla birlikte sonyillarda Swing ile profesyonel derecede arayuza sahip masaustuyazilimlari da ortaya cikmistir. Sonucta hersey yazilimcinin araci nekadar efektif kullandigina bakiyor.
AppletApplet, uzaktaki sistem uzerinden indirilip internet tarayici uzerindecalistirilabilien java uygulamalarina verilen isimdir. Java'nin sonkullanicilar tarafindan taninmasi applet sayesinde olmustur dersekyanlis olmaz herhalde. Applet'ler sisteme zarar veremeyecek bir sekildetasarlanmistir ve bugun ozellikle oyun sitelerinde halen yaygin olarakkullanilmaktadir. Icerisinde applet olan bir sayfayi acmayacalistiginizda tarayiciniz otomatik olarak java sanal makinesinicalistirip ekranin applet'e ayrilan bolumunde uygulamanin calismasinisaglar.
WebStartWebstart teknolojisi Windows ve Linux sistemlerinin bas belasi olanuygulama kurulum, guncelleme ve silme dertlerine deva olmak uzeretasarlanmis bir sistemdir. Ozellikle Java 1.5 ile daha yayginkullanilmaya baslayacagi tahmin edilen webstart teknolojisi kisacayazilimlarin uzaktan yerel sisteme guvenli olarak kurulmasini vekorumali bir alanda calistirilmasini saglar. Appletlerin bir sonrakiadimi olarak gorulebilir. Bir webstart uygulamasini kurmak icininternet uzerindeki ozel bir baglantiya tiklamak yeterli. Sistemotomatik olarak webstart sistemini calistirip yazilimi java cepbellegine indirir. isterseniz masaustune kisayol koymasini da saglar.Daha sonra sistem off-line ya da on-line olsa bile uygulamacalistirilabilir, ve uzaktaki yazilim guncellendiginde otomatik olara-istenirse- yerel makinedeki yazilimin da guncelenmesi saglanabilir.Kullanicinin ozel olarak izin vermesi halinde uygulama yerel sistemeerisim hakki kazanabilir. Aksi taktirde webstart uygulamalari sistemeyazma islemi gerceklestiremezler (yani virus ve zararli yazilimtehlikesini son derece aza indirger.)
Java hangi dilde yazildi? Javanin cekirdek kismi yani sanal makineninC++ ve belki bazi yerlerde dogrudan assembler kullanilarak yazildiginisaniyorum.. Bu hukmu java bug sayfalarindaki ornek kodlara bakarakverdim.. Java kutuphanelerinin buyuk kismi ise java ile yazilmistir.
Java Her yerde kullanilabilir mi?Hayir, java, ozellikle donanim surucusu gelistirme, isletim sistemiseviyesi yazilimlar, bazi ozel grafik yazilimlari, yuksek hizli 3boyultu grafikli oyunlarda kullanmak icin uygun degildir. JAva 1.5 vesonraki surumlerde openGL destegi ile 3 boyutlu oyun uygulamalarindadaha fazla kullanilmasi umuluyor.
Neden java?
Bu soruya kisisel olarak cevap verecegim, su nedenleri gosterebilirim
* En onemlisi platform bagimsiz. her hangi bir yerde yazdigimyazilimi tek satir bile degistirmeden tum isletim sistemlerinde vedonanimlarda calistirabiliyorum. Bu ozelligi .Net'i benim icin safdisiediyor.
* Guvenli kod yazimi. Pointer kullanimi, bellek sizintilari, #ifdefsatirlari, karmasik derleme sistemleri, isletim sistemi hatta derleyicibagimli kutuphanelerden bikmis birisi olarak java'yi gunumuzdekihaliyle C, C++'a bin kere tercih ederim.
* Nesneye yonelik. Bir kere alistiktan ve kavradiktan sonra bir dahaterkedemeyeceginiz nesneye yonelik yazilim gelistirmenin guzel birgerceklemesidir. Bu nedenle kriptik anlasilmaz script dilleri, hemondan hem bundan diyen C++ gibi hibrit dilleri ve C gibi alt seviye biriskence aletine karsi java'yi tercih ediyorum
* Yuksek performans. script dilleri geri dursun.
* Basitlik: az komut sayisi ve konulara cogunlukla ayni yondenyazilmasi ile ogrenilmesi C++ ve C#'a gore kolay oldugundan tercihediyorum.
* Secenek: Birden fazla sanal makine, SDK ve uygulama sunucugelistirici sayesinde tek gelistiriciye bagimli degilim. Java'ningelistirilmesi her ne kadar Sun'in denetiminde yapilsa da JCP adiverilen bir organizasyon ile diger sirketler de java'ningelistirilmesine dogudan katkida bulunmaktadir. Ayrica java'yi karmasikbulanlar daha kolay anlasilabilir BeanShell, Jython, Rubby, Groovy gibiJVM uzerinde calisabilecek script dillerini kullanabilir.
* Gelistirme ortamlari: Java ile yazilim gelistirebileceginiz ticari yada bedava ve acik son derece guclu ve cok sayida yazilim gelistirmeortamlari mevcut. Ustelik tum platformlarda.
* Olgunluk. Java gecen on yilda havanda iyice dovulerek olgun bir halegeldi. Su andacesitli java surumleri bankalar, askeri sistemler hattauzay araclarinda kullanilmaya uygun olarak gorulmektedir. Kurumsalalandaki uygulamalarin buyuk cogunda JAva tercih edilmektedir. .Net'inbu asamaya gelmesi icin daha kirk firin ekmek yemesi gerekir vegenellikle ciddi bir yatirimcinin zaman kaybina tahammulu yoktur.
* Acik kod: java ile gerceklestirilen acik kodlu proje ve frameworksayisi on binlerle ifade ediliyor. hemen her ticari uygulamanin biracik kodlu karsiligini bulmaniz mumkun.
* Destek, Java su anda IBM, Oracle, Sun, Bea gibi dev sirketlertarafindan desteklenmektedir. Bu sirketlerin hic birisi .Net yolunagideceklerine dair en ufak bir isaret vermemislerdir. O nedenlejava'nin gelecegini aydinlik olarak goruyorum.
* Eger iyi derecede java ve yazilim gelistirme bilirseniz iyi ve ciddi bir is bulma sansiniz diger dillerden daha yuksektir.