1 / 35

Melih hilmi uludağ 22.07.2014

Melih hilmi uludağ 22.07.2014. Java 7 & java 8 yenilikleri ve özellikleri. Java SE 6 çıkış tarihi 11 Aralık 2006 . Yaklaşık 4,5 yıl farkla Java SE 7 yayınlandı. Bu süreçte Java SE 6 nın 26 kadar güncellemesi verilse de, Java tutkunları JDK 7 için sabırsızlanıyorlardı.

Download Presentation

Melih hilmi uludağ 22.07.2014

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Melih hilmiuludağ22.07.2014 Java 7 & java 8 yenilikleri ve özellikleri

  2. Java SE 6 çıkış tarihi 11 Aralık 2006. Yaklaşık 4,5 yıl farkla Java SE 7 yayınlandı. Bu süreçte Java SE 6 nın 26 kadar güncellemesi verilse de, Java tutkunları JDK 7 için sabırsızlanıyorlardı.

  3. Java 7 ile gelen yenilikler Genel olarak, • Performans güçlendirilmiş, kararlılık ve güvenirlilik sağlanmış. • Daha zengin internet uygulamaları için Java Eklentisine yönelik iyileştirmeler yapılmış. • Java kodu yazma ve optimize etme üzerine dile yenilikler ve iyileştirmeler getirilmiş. • Java dışı dilleri daha etkin desteklemek için Java Virtual Machine iyileştirmeleri sağlanmıştır.

  4. BÖL VE YÖNET/KATIL JAVA 7’ nin en iyi yanı, Problemi daha akıllı bir biçimde alt problemlere parçalayacak ve bu alt problemlerin çözümüne götüren iş parçaları arasında düşük eş zamanlama (synchronization) maliyeti olan yapılara ihtiyacımız var. Nihayet Java 7 Böl/Katıl çatısı (Fork/Join Framework)olarak adlandırılan bir çözüm sunarak çok çekirdekli sistemlerde uygulama geliştirmeyi nispeten kolaylaştırdı. 

  5. ÖNE ÇIKAN ÖZELLİKLER

  6. Değişkenleri Binary olarak tanımlayabiliyoruz. İlkel tiplerden tam sayıların değerlerini tutabildiğimiz byte, short, int ve long tipleri artık binary şekilde tanımlayabiliyoruz. Yani sayıların başlarına “0b” ya da “0B” yazabiliyoruz. B’nin burada küçük büyük harf olması herhangi bir şeyi değiştirmiyor.

  7. Sayısal tipleri artık basamaklar arasına alt çizgi yazarak tanımlayabiliyoruz. Yalnız ondalıklı sayılarda noktadan hemen önce ya da sonra, long tiplerde de ‘L’ harfinden önce alt çizgi kullanamıyoruz. Bunun yanında sayısal değerin en başına ya da en sonuna da alt çizgi koyamıyoruz. Alt çizgi kullanımı bize okunurluk sağlıyor. Sayısal değişkenler arasına alt çizgi konulabiliyor.

  8. Switch kullanımında artık String türe izin veriyor. Java’nın sayılı eksikliklerinden görülen bu durum giderilmiş. Artık Stringdeğişkenleri switch komutu ile kıyaslayabiliyoruz. 6.0

  9. Generic tiplerde kullanım kolaylığı. Generic tipler kullanırken yazdığımız <> işaretleri arasındaki objeler, yaratılan instance’larda da yine aynı şekilde yazılıyordu. Bu da sadece tanımda bile bir sürü karmaşaya yol açıyordu. Java 7 ile beraber new ile yarattığımız instance’larda <> açıp kapatmak yeterli olacak.

  10. Varargs’ ta (parametre sayısı belli olmayan metot) iyileştirmeler var. Varargs kullanırken parametre sayısı belli olmayan değişkenleri metot içerisinde dizi gibi kullanabiliyorduk. Yalnız çalışma anında nesnelerin birbirlerine cast edilememesi (ClassCastException) gibi hatalarla karşılaşıyorduk. Artık derleyici gelişmiş uyarı ve hata mesajları veriyor. 

  11. MULTI-CATCH ile hata yakalama daha kolay hale geldi. Bilindiği üzere Try-Catch ile Hata yakalamada birden fazla hatayı Catch de karşılamak için hep yeniden blok açılırdı. Artık « I » Operatörü ile birden fazla hata nesnesini tek seferde yazmak mümkün hale geldi. • java7 öncesi; • try{…………} • catch(NumberFormatExceptionnfe) {…………} • catch(XExceptionxe) {…………} • . • . • . • java7'de ise; • try{…………} • catch(NumberFormatExceptionnfe | XExceptionxe | …) {…………}

  12. DİĞER ÖZELLİKLER

  13. Graphics2D • Graphics2D • java.lang.Object • java.awt.Graphics • java.awt.Graphics2D • Graphics • java.lang.Objectjava.awt.Graphics Graphics2D iki boyutlu bir grafik, metin ve görüntüleme yetenekleri ile ilgili 2D Java API parçasıdır. Eski Graphics sınıfının aksine, Graphics2D koordinat dönüşümlerini destekler. Ayrıca geometri, renk ve metin mizanpajı üzerinde daha iyi kontrol sağlar.

  14. Garbage-First Collector vs GarbageCollector yapısı Garbage-First Collector yapısı Garbage-First Collector JDK7 nin 4.versiyonunda dahil olmuştur. GC1 in çoklu işlemcili bilgisayarlar (sunucu bilgisayar) için tasarlandığını söylemek gerekir. GC ye göre yetenekleri ve performansı arttırılmış yapıya sahiptir. SerialGC aynı anda tek thread(iplik) çalışabilir, aynı anda birden fazla thread çalışan GC sistemine ise ParallelGC adı verilmektedir . GC1 i GC den ayıran en belirleyici özellik Seri ve Paralel çalışma biçiminin daha başarılı olmasıdır.

  15. JDK 7u4 ile birlikte G1 (Garbage First) olarak adlandırılan yeni bir çöp toplayıcısı geldi. Uzun dönemde, G1’in Java platformunun tek çöp toplayıcısı olması hedeflenmektedir. JSM’nin en zayıf halkası çöp toplayıcıdır. Çöp toplama sırasında tüm uygulamanın iş parçalarının durdurulduğu, "tüm dünyanın durduğu" (stop-the-world) bir evre vardır. Bu evre boyunca uygulama hiçbir iş yapmaz. Ne yazık ki çöp toplayıcı algoritmaları Heap boyutuna göre ölçeklenebilir değildir. Heap boyutu arttıkça bu süre de hızla artmaktadır. Örneğin 64GB heap boyutu olan bir JSM’de bu süre bir dakikayı aşabilir. G1 bu süre için bir sınır tanımlamamıza olanak sağlıyor.

  16. Modularity(Modulerlik) • Paket yapısında yenilik sağlanmış. • Bu yapı jar yapısını daha düzgün hale getirdi. • Versiyon desteğini, aktif erişimi(reflective), dağıtım formatını(Java Module) bize sağlayacak. Java Kernel (Java Çekirdeği) • Dinamik yükleme modülü getirildi. Bu sayede Sistemin başlama süresi kısaltıldı.

  17. OtamatikGet() ve Set() methodları oluşturulacak. Date/Time API Not: Joda Time Library harici olarak indirilip sisteme ekleniyor. • Problemler çözüldü. İyileştirmeler yapıldı. • Joda Time Library e geçildi. JodaTime Library:dayOfYear, hourOfDay gibi basit sahalar ile önemli tarihsel bilgileri hızlıca elde etmemizi sağlarken sunduğu hizmet sınıfları ile karmaşık tarih işlemlerini kolayca yapabilmemize olanak verir. Yaygın olarak kullanılan kitaplık şu an için (sürüm 2.0) 8 takvim sistemini desteklemektedir.

  18. Swing Desktop uygulamaları için kullanılan swing kütüphanesi yenilenmiş. Swing kütüphanesi kullanarak daha görsel ve göze hoş gelen uygulamalar yazılabilecek. Beanbinding özelliği iyileştirilmiş.

  19. AnnatationType (AT)=>@ Hatırlatma: Java  Uzantıları .xml ya da .properties olan bu dosyalarda tutulan veriler isim ve isme karşılık gelen değerler şeklinde tutulurlardı. Projelerimizde ayar yapacağımız zaman bu dosyaları gömerdik sisteme. Java 5.0 ile birlikte dile eklenen Annotationkavramı ile artık ayar dosyalarından kurtulduk. Not: Annotation değişkenleri olarak sadece primitive tipleri, StringveEnum tipleri ve tek boyutlu dizileri kullanabiliyoruz. Dizi elemanlarının tipleri de yine sadece ilkel tip, String ya da enum olabiliyor

  20. Java 7 de ise, • Annotationdesteği genişliyor. • Tür tanımlamada, ifadelerde ve diğer birçok elementdeannotation daha çok kullanılacak. • Derleyici ve statik analiz araçları için kodu çalışma zamanında doğrulayacak annotationlar yazmaya olanak vericek.

  21. Sonuç olarak, JDK 7 ile sadece Java diline eklemeler yapılmamış. Java virtualmachine(JVM) de bir oldukça iyileştirilmeler yapılmış. Örneğin helloworld yazıp çalıştırdığımızda println çıktısını daha çabuk görebileceğiz. Çünkü Javanınçekirdeğindeki sınıf yükleme(classloader) kısmı oldukça iyileştirilmiş. Java dilinin yetenekleri arttırılmış ve JVM; pyhthon, matlab vs. gibi dinamik dilleri destekler hale geldi. JDK 7 de gelmesi planlanan bir çok özellik JDK 8 e aktarıldı.

  22. Java 8 ile gelen yenilikler Genel olarak, • Lamda İfadeleri ve Sanal Genişletme YöntemleriJava SE 8'in öne çıkan özelliği, Lamda ifadelerinin uygulanması ve Java programlama dili ve platformunu destekleyen yönleridir. • Tarih ve Saat API'siBu yeni API, geliştiricilerin tarih ve saati daha doğal, net ve anlaşılması kolay şekilde ele almasına izin vermektedir. • NashhornJavaScriptMotoruJavaScript motorunun hafif ve yüksek performanslı yeni bir uygulaması JDK'yaentegre edilmiştir ve mevcut API'ler yoluyla Java uygulamaları tarafından kullanılabilir. • İyileştirilmiş GüvenlikÇağırana duyarlı yöntemlerinin mevcut elle yönetilen listesini, bu gibi yöntemleri doğru şekilde tanımlayan bir mekanizmayla değiştirir ve çağıranlarının hatasız şekilde keşfedilmesini sağlar.

  23. WIN_XP ! Windows 8 ‘i , Windows7 ve Vista dan ayıran küçük fark: Metro Kullanıcı Arabirimi. Yani, Microsoft, Başlat ekranındaki eklentileri desteklemediğinden, Java Başlat ekranında çalışmayacaktır. Java'yı çalıştırmak için Masaüstü ekranına geçmeniz gerekir. 

  24. Java 8 ile birlikte gelen Lambda ifadeleri ise fonksiyonel programlama yapmamıza olanak sağlıyor. Lambda ifadeleri sayesinde fonksiyonlar artık dilin birinci sınıf vatandaşı olarak işlem görecek. Fonksiyon tipinden bir değişken tanımlayabilecek ve fonksiyona parametre olarak başka bir fonksiyonu geçirebileceğiz.

  25. LambdaExpressions Buradaki temel amaç, bir metoda bir obje yerine daha fazlasını vermek… Şimdiye kadar J8 öncesinde, callbackclassları yazarak bu tip işlemleri yönetiyorduk. Bu da gereksiz yere uzun kodlar yazma gerekliliğini beraberinde getiriyordu. J8 deki Labmda sayesinde, 5,6 satırda yazdığımız kodları tek bir satırda yazabileceğiz. Bir örnek üzerinden açıklayım,

  26.   Üstelik Java 8 ile gelen yeniliklerin bir kısmından kodda basit değişiklikler yaparak yararlanmak mümkün olacaktır. Örneğin, Java 8'de Arrays yardımcı sınıfına, diziler üzerinde paralel sıralama yapmamızı sağlayan parallelSort() metodu eklenmiştir. Bu yeteneği kullanmak için tek yapmamız gereken,Arrays.sort() çağrısını Arrays.parallelSort() çağrısı ile değiştirmektir. Paralel sıralamada Java 7 ile gelen Böl/Katıl çatısı kullanılmıştır. Java 8 ile birlikte sadece diziler üzerinde değil Collection API içinde yer alan kaplar üzerinde de paralel işler çalıştırmak mümkün olabilmektedir.

  27. Java 7 ile birlikte çok uzun bir süre sonra Java Sanal Makinası (JSM) yeni bir bytecode ile tanıştı: invokedynamic. Her ne kadar yeni bir komutla tanışmış olsak da henüz Java 7'de derlendiğinde invokedynamic kodu ürettirecek herhangi bir Java ifadesi bulunmuyor. Java 8'de ise fonksiyonel programlama ve arayüz metot eklentileri (=MethodExtensions) içeren kodlar derlendiklerinde invokedynamic kodu içerebilecek

  28. invokedynamic ve JSM’nin yapısındaki yenilikler Java programlama dili dışındaki dillerin, JSM üzerinde yüksek başarımla çalışmasına olanak sağlamaktadır. Java platformu çok dilli bir platforma doğru evriliyor. Bunun ilk uygulaması Java 8 ile birlikte gelen yeni Javascript motoru Nashorn olacaktır. Platformdaki bu yenilikler sayesinde Javascript kodlarının çok hızlı çalıştığına tanık olacaksınız. Java 7 bunun altyapısını oluşturdu. Java 8 ise ilk uygulamasını bize sunuyor.

  29. Java 8’de çöp toplama ile ilgili dikkate değer tek gelişme Kalıcı Alan (=Perm(anent)Gen(eration)) olarak adlandırılan alanın genel Heap alanına eklemlenmesidir. Özellikle web uygulamalarında sık yapılan güncellemelerden kaynaklanan bu alanının dolmasına nedeni ile aldığımız taşma hatası ile şimdi daha seyrek karşılaşmak mümkün oldu.

  30. Sonuç olarak, Java platformu aynı .Net platformu gibi modüler değildir. Bir projede kullandığımız iki ayrı kütüphanenin, ortak bir kütüphanenin farklı sürümlerini kullanması durumunda, yürütme zamanında sınıf yükleyici ilk önce hangi sınıfı yüklemiş ise o sınıf kullanılacaktır. Sınıf yükleyici aynı sınıfın farklı sürümlerini yüklemesi ve yönetmesi mümkün değildir.Bu problemi farklı yöntemlerle çözmek mümkün olsa da projeye geliştirme açısından zorluk katıyor.Uzun süredir beklediğimiz modülerlik çözümü, Jigsaw projesi ile platforma kazandırılması amaçlansa da Java 8’e yetiştirilemeyeceği anlaşıldığı için çıkartılmıştı. Java 9’da bu problemin çözülmesini umuyoruz.

  31. Beni dinlediğiniz için Teşekkür Ederim. Melih Hilmi ULUDAĞ • Kaynaklar: • http://www.java.com/tr/download/faq/release_changes.xml • http://docs.oracle.com/javase/7/docs/ • http://www.eclipse.org/jdt/ui/r3_8/Java7news/whats-new-java-7.html • https://www.linkedin.com/today/post/article/20140409042429-11833655-java-8-ile-gelen-yenilikler • http://emreesirik.com/java-java-7-cikiyor-java-7-yeni-ozellikler.html

More Related