Java

Hikmet Çakır
5 min readDec 20, 2020

İlk olarak Java’nın oluşturulma sürecinden başlıyalım.Sun Microsystems’in bazı elektronik ev araçlarının birbirleriyle etkileşimli çalışabilmesi için bir proje başlatmasıyla başlar.Bu proje Java dilininde temelini oluşturur.Java 1995 yılında piyasaya sürülen bir programlama dili ve bilgi işlem platformudur.

Java İsmi Nereden Geliyor ?

Bir rivayete göre James Gosling, java programlama dilini ekibiyle yazmaya başladıktan sonra bulundukları binanın penceresinden bakarken dışarıdaki meşe ağaçlarını görüp dilin adını OAK koymaya karar verirler.Bu isim pek beğenilmeyince Java’yı yazan ekip ismin değiştirilmesine karar verir.Kahveyi çok seven ekip yine bir gün iş yerlerinin yakınlarındaki bir kafede kahve içerken bu dilin isminin JAVA olmasına karar verirler.

Java Endonezya’nın Java adalarında yetişen bir kahve türüdür.Aslında programlama dili olarak bildiğimiz Java’nın adı Endonezya’nın bir adası olan Java’dan gelmektedir.Bununla beraber daha sonrasında Java adasının yakınlarında bulunan yerlerin birçoğuda zamanla Java’da çeşitli yapılara isim olarak konulmuştur.

Java Nerede Kullanılıyor ?

  • Java Web Applications
  • Software Tools (Eclipse ,Intellij IDEA,NetBeans)
  • Trading Application (Murex)
  • J2ME Apps
  • Embedded Space (Orjinal Java embeed systemler için tasarlanmıştır.)
  • Big Data Teknolojileri(Hadoop,Apache’s Java-based HBase and Accumulo and ElasticSearch)
  • Scientific Applications
  • Finans Endüstrisinde Server Uygulamaları
  • Android Apps

Java’nın Avantajları

  • Kullanımı kolaydır.Genelde bu ifade kullanıldığında insanlar şaşırıyor ama JS var ondanda mı diyorlar.JavaScript’e kıyasla zor olsada JavaScript’in sınırları belli bir yapısı bulunmaktadır.Java’nın yapabilecekleri incelendiğinde çok çok geniş bir yelpaze karşımıza çıkmaktadır.Bununla beraber C ve C++ ile uğraştıysanız bellek problemleri , kod güvenliği gibi birçok kompleks yapı kod geliştirme sürecinde problem yaratıp süreci yavaşlatıcaktır.Java’da bu problemler minimize edilmiştir
  • Object-Oriented yapıdadır.
  • Platform bağımsızdır.Bir kere yaz her yerde çalıştır
  • Distributed computing.Bildiğiniz üzere günümüzde programlar o kadar çok büyüdüki bir bilgisayara sığamaz oldu Java bu sorunlarımızada koşuyor.Yazdığımız uygulamalarımızı bir ağ üzerinde bulundurabiliyoruz(CORBA & EJB vs.)Bununla beraber istersek API’lerle bilgi alış verişi yapıp programın bir bölümünü bir bilgisayarda bulundurup oradaki verileri başka bir bilgisayarla API’lerle geçirtebiliyoruz.
  • Güvenlidir, pointerlar gibi kodun güvenliğine zarar verecek yapılar bulundurmaz.Bununla beraber nesne güvenliği erişim konusunda sağladığı kısıtlayıcı yapılar ile yazdığımız kodun güvenliğini daha rahat sağlıyabiliyoruz.
  • Geriye uyumludur.Şayet Java ilk çıktığında bir program yazdıysanız günümüzde bu program halen daha derlenip çalışacaktır.Şimdi akıllara soru geliyor hikmet ben deprecated ifadeleri gördüm ee ne bu o zaman , Onlar geçmişte o yapılar üzerinde çeşitli problemler yaşandığı çeşitli sorunlara sebebiyet verdiği sebebiyle veya performans ve işleyişte iyileşmeye gidildiği için Java bak bu eskidi yenileri var biraz kurcala istersen demesi
  • Multithreading destekler.
  • Bellek kaçağı gibi sorunlar için Garbage Collector yapısı bulundurur buda memory leak problemini minimize eder.Günümüzde makina öğrenmesi , yapay sinir ağları , doğal dil işleme gibi alanlarda hızla gelişme sağlanmaktadır.Bu alanlarla ilgilenenler genellikle matrix işlemleri gibi çeşitli işlemler gerçekleştirirler.Genellikle bu işlemleri yaparkende bilgisayarın threadlerini optimum düzeyde kullanıp daha iyi daha kısa zamanda sonuca ulaşmak için openMP , CUDA ,OpenGL gibi çeşitli araçları kullanırlar burada gerek bu araçların getirdiği karmaşıklık gerek yapılan işlemlerde oluşan karmaşıklık gibi sebeplerde üst üstte bindiğinde kolaylıkla bellek kaçakları olduğundan program bir müddet sonra patlamakta veya yanlış sonuç üretmektedir Java bende Garbage Collector yapısı var böyle dertlerinizden kurtarıcam sizi diyor.Şimdi burada tamamiyle memory leak oluşmayacak diye bir şey bulunmuyor yinede az oluşuyor yerine göre tabi.Tabi bu garbage collectorun artısı olduğu gibi eksiside var performans kaybı gibi.

Java’da Bir Kodun Oluşturulması ve Çalıştırma Süreci

Öncelikle Java’da hem derleme hemde yorumlama’nın bulunduğunu belirtmek isterim.Neden böyle bir yol izlenildiğine değinecek olursam Java ilk çıktığı zaman bir kod yazdığımızda bu Linux’da çalışacak mı ? gibisinden sorunlar oluşuyordu hatta ve hatta işletim sistemimizi güncellediğimiz zaman acaba kodumuz çalışacak mı garantisi bulunmuyordu.Java böyle bir yol izleyerek bizleri sorunlarımızdan arındırdı şimdi ne demek istiyorum.Baştan başlıyarak anlatayım.

İlk olarak , Java’da kaynak kodlar önce ara bir dile derlenir.Sonra ara dildeki kodlar çalışma zamanında çalıştırılır.Yani yorumlanır.Java’da bu ara dile byte code denir.

Byte code gerçekte var olmayan yani ‘sanal’ olan bir makine için makina kodu olarak düşünülür.Bütün bilgisayarların ortak ve benzer komutlarını çalıştırabildiği varsayılan bu sanal makineye Java Sanal Makinesi(JVM) denir.

Kaynak kod derlenerek bu makine için yazılmış byte codelarına dönüştürüldükten sonra JVM çalışma anında bu kodları gerçek makina kodlarına çevirir ve çalıştırır.

Ara dildeki makina kodu gerçek makina kodlarına oldukça yakın olduğu için,kaynak kodunun yorumlanmasına oranla program çok daha hızlı çalışır.

Java’nın bir ara dile çevrildikten sonra da olsa çalışma zamanında yorumlanıyor olması derlemeli dillere göre yavaşlığa yani düşük performansa yol açar ancak Java programlarını makineye, işletim sistemine ve işlemciye bağımlı olmaktan kurtarır.Makinelerin giderek daha hızlanması ve ucuzlaması , yavaşlık sorununu kritik olmaktan çıkarmıştır.

JDK,JRE ve JVM

Java programlarını derlemek için birçok program vardır ancak Java platformunun kullanımı zorda olsa temel bir geliştirme aracı bulunmaktadır (JDK) .Bu sistem bir derleyici program ve bir yorumlayıcı program içerir.Java programlarını sadece çalıştırmak(yorumlamak) içinde JRE adlı bir yazılım bulunur.Birçok internet tarayıcısı Java programlarını bir internet sayfası içerisinde çalıştırmak için bir JVM içerir.

Java’nın kaynak kodları ‘.java’ uzantılı metin dosyalarında bulunur.Derleyici bu dosyaları derler ve bayt kodların bulunduğu ‘.class’ uzantılı dosyaları üretir.

İkili kodlar,yani sadece 1 ve 0'lardan oluşan değerler içeren dosyalar ,bir programın çalışması için yeterli olur.Genellikle ,tek bir birimde bulunmaları ve daha az yer kaplamaları için bir programa ait ‘.class’ dosyaları sıkıştırılmış halde ‘.jar’ uzantılı dosyalarda tutulur.JAR Kısaltması java arşivi demektir ve temelde sıkıştırma standardı zip biçimine dayanır.

Java uygulamalarını çalıştırmak için bir JVM olması gereklidir.JVM,işletim sistemine gömülü olabilir , tarayıcı gibi bir programın içerisinde bulunabilir veya bir motor olarak makineye kurulduktan sonra java uygulamalarının çalıştırılmasını sağlayabilir. İzni olan her şirket kendisine bir JVM yapabilir

Java uygulamalarını çalıştırmak için kullanılan JVM gerçekleştirimlerinden ençok bilineni JRE programıdır.JRE , bir JVM ve yardımcı bir takım programlar içerir.JRE ,Java Plugin olarak da adlandırılır.Çünkü JRE bir tarayıcının java desteğine sahip hale gelmesini sağlar.

JDK,java kaynak kodlarını derlemek için kullanılan araç JDK ortamıdır.Derleyici içerdiği gibi bir JVM(JRE) de içerir .Bunun dışında çeşitli geliştirme araçlarıda JDK ile birlikte gelir.

JDK,java ile geliştirme yapmak için gerekli her aracı içerir.Ancak bunlar kullanımı kolay,görsel araçlar değiltir.Birçok konsol uygulamasından oluşan bu araçları yeni öğrenenler kullanmakta zorlanabilir.

Just In Time (JIT) : Java’nın ilk zamanlarda bytecode işleme derleme hızı pek iyi değildi bu nedenle bazı yazılım şirketleri ‘Just In Time’ denilen bir yöntem geliştirdiler.Bu yöntem ile çağrılan metodlar makine diline anında çevrilerek programın yükü hafifletilmektedir.Buda ciddi performans artışına sebep olmaktadır.Günümüzde popülerliğini yitirmiştir.

Hotspot : Hotspot programdaki sürekli tekrarlanan kod bölümlerine verilen isimdir.JVM sıklıkla kullanılan kod bloklarını gözlemler ve bu kod blockları için bellekte yer ayırır.Bu kodları sürekli makine koduna çevirmektense bu kodların makine koduna çevrilmiş hallerini bu hafızda tutar.Dolayısıyla her defasında çevirme işlemi gerektirmez.

Garbage Collector : C ve C++ dillerinin en büyük eksikliklerinden biri dinamik bellek yönetimidir.Bu dillerde pointerlar için hafızada ayrılan yerler ihtiyaç kalktığında tekrardan hafızaya geri iade edilmeliydi.Aksi durumda memory leak sorunuyla karşılaşıyoruz. Javada bellek yönetimini garbage collector ile otomatik olarak yapar.

Applet : Web browser üzerinden çalıştırılabilen Java programlarına applet denir.Applet html dosyası içerisine gömülür ve browser içerisindeki java interpreter(yorumlayıcı) aracılığıyla çalıştırılır.Oyun sitelerinde yaygın bir şekilde kullanılmaktadır.

Umarım faydalı olabilmişimdir daha fazla bilgi için alta linkler bırakıyorum boş vakitlerinizde izleyip daha derinlere inebilirsiniz :]

Link 1 : https://www.youtube.com/watch?v=BXFHuaQNnLo

Link 2 : https://www.youtube.com/watch?v=mAtkPQO1FcA

Link 3 : https://www.youtube.com/watch?v=Zv8-hrGiGno

--

--