java 8 yenilikler / Java 8 ve yenilikleri nelerdir? - Hasscript.com | Programlama hakkında

Java 8 Yenilikler

java 8 yenilikler

JAVA 9 ve Yenilikleri

JAVA 9 ve Yenilikleri

November 14, 2017

Uzun süredir beklenen Java 9 eylül ayı sonunda resmi olarak duyuruldu. Bu yazıda Java 9 ile gelen önemli yenilikleri ve geliştirmeleri örnekler de sunarak özetleyeceğim.

Çalışma Özeti:

  1. Java 9 REPL JSHELL (Java Shell)
  2. Java 9 Module System
  3. Process API Değişiklikleri
  4. Factory Metotlar: Immutable List, Set, Map
  5. Try with resource
  6. Reactive Stream
  7. Anounymous inner Class’lar için Diamond Operator
  8. Optional üzerinde yapılan geliştirmeler
  9. Stream Apı’ındaki geliştirmeler
  10. @Deprecated Anatosyonundaki Geliştirmeler
  11. Http 2.0 Client

İlk olarak, Java 9’u buradan indirebilirsiniz.

Bu yeni sürüm ile birlikte hangi yenilikler geldiği sorusunu, önemli olduğunu düşündüğüm yenilikleri içeren liste üzerinden yola çıkarak cevaplayalım.

Java REPL — JSHELL (Java Shell)

Java 9 ile birlikte yeni bir REPL (Read-Eval-Print-Loop) aracı olan Jshell resmi olarak yayınlandı.

Repl nedir?’ sorusuna yanıtlamak gerekirse; bir Shell arayüzüdür ve bu arayüz üzerinden girilen her kod, satırları okunarak çalıştırılır ve sonuçlar ekrana yazdırılır. Bir nevi komut satırı istemcisidir.

Java’nın REPL’i ise Jshell adıyla resmi olarak yayınlanmıştır. Böylece komut ekranı üzerinden kod parçaları yazılabilir ve direkt olarak yine burada çalıştırılabilir hale geldi. Artık özellikle küçük kod parçaları çalıştırmak istediğinizde dosyalar oluşturup derleyip çalıştırmaya ihtiyaç kalmadı.

Ek olarak noktalı virgülsüz de çalıştırabileceğiniz bir komut ekranı geldi. Burada istediğiniz kodları doğrudan çalıştırabilirsiniz. Oracle bu araç ile birlikte özellikle yeni başlayanlar ve pratik yapmak isteyenler için bire bir ortam sağlamış oldu.

Jshell’in kullanımını aşağıdaki örnekte bulabilirsiniz;

Örnekte görüldüğü gibi doğrudan kodlamaya başlayabilirsiniz. Java’da yapabileceğiniz her şeyi bu araç üzerinden de gerçekleştirebileceğinizi unutmayın.

Vereceğim örnekleri de sizlere jshell üzerinden sunacağım.

Yeni Modül Sistemi

Java 9’un yeniliklerinden biri de Modül sistemindeki değişimler. Bu değişimler JigsawProjesinin bir parçası olarak geliyor.

  • Modüler JDK
  • Modüler Java Source Code
  • Modüler Run-time Images
  • Encapsulate Java Internal APIs
  • Java Platform Modül Sistemi

Java 9’dan önceki sürümlerde monolitik paketler (jarlar) ile Java tabanlı uygulamalar geliştiriyorduk. Yani bir Java projesi geliştirirken jar paketinin tamamını eklemek zorunluluğu projedeki dosya sayısını da artırıyordu.

Burada iki önemli sorun var. Bunlardan birisi kodu encapsulate etmek ve farklı modüller ile olan bağımlılıkları kontrol etmek. Diğeri ise dosya yollarını düzenlemenin zorluğu, tekrar eden dosyaların varlığına yol açmasıdır. Bunlara çözüm olarak Java 9 ile birlikte yeni bir Modül Sistemi geldi.

Artık her modül kendine ait bir tanımlayıcı içeriyor. “requires” kısmı bağlı olan modüler belirtilebiliyor. Buna ek olarak “exports” kısmında paketler arası erişilebilirlik yönetilebiliyor.

Aşağıda küçük bir örnek bulabilirsiniz;

module blog {

exports com.netas.blog;

requires modules;

}

Bu modüle descriptor sayesinde java modül yönetimi sağlayarak daha önce bahsettiğim iki sorunu da çözüyor.

Process API Değişiklikleri

Process Api, işletim sistemi içerisinde bazı proseslerin yönetimi için kullanılır ve Java Sanal Makinesini kullanarak bu işlevi yürütür. Bu API’yi kullanarak prosesi çalıştırabilir, duraklatabilir, kapatabilirsiniz.

Peki, bu Api’da ne gibi değişiklikler oldu?

Yeni sınıflar ile birlikte yeni metotlar eklenerek, işletim sistemleri üzerindeki işlemlerin yönetim ve kontrolünü kolaylaştırılmayı amaçlayan geliştirmeler yapıldı.

Yeni değişiklikler, Proccess sınıfında child veya daha alt prosesleri tanımlamanıza, bu proseslerin PID’sini (process id) öğrenmenize, bu prosesler hakkında bilgileri anlık olarak izleyebilmenize ve daha fazlasına daha esnek ve kolay bir şekilde olanak sağlamaktadır. Merak edenler için eklenen sınıflar şunlar:

java.lang.ProcessHandle

java.lang.ProcessHandle.Info

Küçük bir örnek ile gösterelim;

Örnekte ProcessHandle sınıfını kullanarak kullanılan prosesin bir objesini oluşturmuş olduk ve bu objenin bilgilerini info() metoduyla öğrendik.

Factory Methods for Immutable List, Set, Map and Map.Entry

Java 9 ile birlikte gelen yenilik değiştirilemez collection nesnelerini sadece tek kod satırı ile oluşturmamızı sağlıyor.

Önceden değiştirilemez collection oluşturmak için aşağıdaki gibi bir kod bloğu yazmamız gerekiyordu.

Set<Integer> set = new HashSet<>();

set.add(1);

set.add(2);

set.add(3);

set = Collections.unmodifiableSet(set);

Java 9 ile birlikte bunu kolayca tek satırda yapabiliyoruz.

Set<Integer> ints = Set.of(1, 2, 3);

List<String> strings = List.of(“netas”, “blog”);

Factory metotlarla immutable List, Set ve Map objelerini daha kolay yaratmaya olanak sağlandı. Bu yenilik metotların kullanırken boş ve boş olmayan objeler yaratmamızı sağlıyor.

Try with resource

Java 7 ile birlikte gelmiş olan exception handler yapısı kaynakları otomatik olarak yönetebiliyordu. Java 9’da bu konuda da bazı geliştirmeler yapıldı.

Örnek olarak aşağıdaki gibi bir okuma bloğumuz olduğunu varsayalım.

BufferedReader reader =newBufferedReader(newInputStreamReader(System.in));

Java 7 ve 8’de try bloğunu aşağıdaki şekilde tanımlayabiliyorduk;

try(BufferedReader r1 = reader){

}catch(IOException e)

{

}

Java 9 ile birlikte daha kısa ve okunaklı bir şekilde ifade edebiliriz;

try(reader){

}catch(IOException e){

}

Bu yenilik ile birlikte yazılan kod gereksiz parçalardan arınmış ve kod okunurluğu da artmış oluyor. Diğer bir artısı ise eskiden oluşabilecek kaynak sızıntılarından (resource leak) da kurtulmuş oluyoruz çünkü yeni bir obje tanımı yapmaya gerek duymuyoruz.

Reactive Streams

Reactive Streams asenkron stream işlemleri için non-blocking kullanılan bir yapıdır. Scala ve Akka’da oldukça popüler olan reactive programlama Oracle’ın kararıyla reactive stream api adı altında Java 9 ile birlikte Java’ya entegre edildi.

Publish/Subscribe Freamwork’üne implement edilen bu yapı asenkron olarak işlev görebilmektedir. Yeni arayüzler aşağıda belirtildiği şekildedir.

  • Processor
  • Publisher
  • Subscriber
  • Subscription

Anounymous inner Class’lar için Diamond Operator

Diamand Operator basitçe generic sınıflar için bir kurulum olarak tanımlanabilir. Java 9 ile birlikte artık inner sınıflar içinde kullanabilir hale geldik.

List<Map<Integer,Set<String>>> netasList = new ArrayList<Map<Integer,Set<String>>>();

Burada new ile tanımladığımız yapının içine hangi objeyi içereceğini tekrar vermemiz gerekmemektedir. Çünkü tanımlama aşamasında List içinde zaten tanımlamış oluyoruz.

List<Map<Integer,Set<String>>> netasList = new ArrayList<>();

Diamond operator’ü kısaca tanımladık. Konumuza dönecek olursak, Java 7 ile gelmiş olan diamond operatör yeniliğinde Java 8’de anounymous inner class’ların kullanımında kısıtlamalar göze çarpıyordu. Oracle da bunun farkına varmış olmalı ki, Java 9 ile bu sorunu ortadan kaldırdı.

Optional üzerinde yapılan geliştirmeler

Java 9 ile birlikte birkaç tane kullanışlı metot daha Optional Api üzerine eklenmiş oldu. En önemli etkilerinden birisi ise direkt olarak stream özelliğini optional ifadesiyle birlikte kullanabilir hale geldik. Yeniliklerden önemli olanları aşağıda kısaca açıkladım.

Stream: Java 8’de stream ederken optional ile değer kontrolü yapmamız gerekmekteydi. Şimdi ise otomatik olarak bu kontrolü yapar hale gelmiştir.

List<String> strings = streamOptional().filter(Optional::isPresent).map(Optional::get).collect(Collectors.toList());

List<String> newStrings = streamOptional().flatMap(Optional::stream).collect(Collectors.toList());

ifPresentOrElse: Bir değer var mı kontrolü yapar ve varsa değeri kullanarak istenilen işlemi gerçekleştirir. Aksi takdirde verdiğimiz diğer işlemi gerçekleştirmesini sağlayabiliriz.

Or: Bir değer varsa, o değer için Optional’ın değerini gönderecektir, diğer durumda or ile verdiğimiz işlemleri gerçekleştirebilir.

Stream API’ındaki geliştirmeler

Stream içim birkaç yeni ve kullanışlı metot eklenmiş oldu.

Özellikle buradaki iki metot çok önemli, bunlardan birisi takeWhile() ve bir diğeri ise dropWhile() metotlarıdır.

TakeWhile(): Kural yanlış olana kadar gelen değerleri stream eder.

DropWhile(): Kural yanlış olana kadar gelen değerleri düşürecektir.

Tek örnek üzerinde gösterelim, takeWhile ile değerlerde boş olan gelene kadar yazdıralım, yine aynı örnekte dropWhile ile boşluk gelene kadarki değerleri düşürelim ve sonrasını yazdıralım.

@Deprecated Anotasyonundaki Geliştirmeler

Java 8 ve öncesinde @Deprecated Anotasyonu sadece bir marker interface’inden ibaretti; Java 9 ile daha fazla bilgiye erişebilir hale geldi. Deprecated, açıklamaya ek olarak, gelecekte bir metodun var olup olmayacağını ve daha fazla kullanılmamasını gerektiğini anlatıyordu.

İki yeni parametre ile kullanışlılığı arttı: Bu parametrelerden birisi forRemoval ‘boolean’ değer alan ve bir metodun gelecek versiyonlarında var olup olmayacağını setlediğimiz özellik oldu; diğeri ise since parametresi hangi sürümden itibaren gerçekleşeceğini bildirmek için kullanılabilmektedir.

@Deprecated (forRemoval=true , since=”9")

HTTP 2.0 Client

HTTP 2.0 implementasyonu Java 9 ile birlikte Java’da var olmaya başladı ve HTTPURLConnection’ın yerini aldı. HTTP 2.0 ile Websocket de Java9 ile birlikte desteklenmeye başlandı. Bu yeni API’nin önemli noktalarından biri Java’daki ilk Incubator modül olmasıdır.

Incubator modül kavramı ise temelde Java’nın bir sonraki sürümlerinde de benimsenebileceğini ve üzerinde geliştirmelerin olabileceğini gösteriyor. Aksi durumda ise silinmesi söz konusu olabilir.

  • HttpClient isteklerin oluşturulmasını ve gönderilmesini yönetir.
  • HttpRequest, HttpClient aracılığıyla gönderilecek bir istek oluşturmak için kullanılır.
  • HttpResponse, gönderilen isteğin yanıtını tutar.

HTTP 2.0 ile birlikte iki yönlü iletişim, tek bir TCP bağlantısı ile çoğullama, uzun sürebilen bağlantılar, durum bilgisi içeren bağlantılar yapılabiliyor.


Benim önemli olarak gördüğüm yenilik ve geliştirmeleri açıkladım. Ama Java 9 çok çok daha fazlasını bize sunuyor. Burada özet olarak geçtiğimiz özellikleri bile uzun uzun incelemek gerekiyor.

Hoş geldin Java 9 :)

Subscribe to receive updates on new posts

Gökhan Ayrancıoğlu

Gökhan Ayrancıoğlu

Sr. Software Engineer @Heycar

Java 8 – Date API ile Gelen Yenilikler

Merhaba arkadaşlar,
mobilhanem.com üzerinden anlattığımız/yayınladığımız derslerimize Java 8 Yenilikleri başlığı altında üçüncü yazımız olan Date API ile Gelen Yenilikler ile devam ediyoruz. Akabinde devam edecek serinin içeriklerini buradan takip edebilirsiniz.

Java Date API nedir?

Java 8 ile birlikte gelen bu yenilik paketi altında yer alan Date ve Time sınıflarında bulunan eksiklikleri gidermek ve bazı sorunları ele almak için geliştirildi. Öncelikle var olan kısımda neler vardı ve Java 8 Date Api ile hayatımıza neler girdi, bakalım.

Öncelikle Java 8 öncesindeki ve sınıfları thread safe değildi. Peki thread safe ne demek? Kısaca bahsetmek gerekirse; Thread safe çoklu thread yapılarda karşımıza çıkan, birden çok thread’in bir kaynağa eriştiği durumlarda thread’lerin kilit (deadlock) oluşturmadan işlerini bitirmelerini sağlayan mekanizmadır. Bu genellikle bir kaynaktan veri okurken değilde kaynağa erişmeye çalışıldığı durumlarda, değerleri değiştirmek istediğimizde başımıza gelebilecek bir durumdur. Java’da immutable (değişmezlik) sınıflar thread safe’dir.

Konumuza dönecek olursak Java 8 ile birlikte gelen Date ve Time sınıfları immutable yani thread safe’dir. Böylelikle çoklu thread yapılarda bizleri thread senkronizasyonu probleminden korur. Java 8’den önce saat dilimini yönetmek için ekstra util class dediğimiz yardımcı sınıflar yazıyorduk java 8 ile birlikte Local ve ZonedDateTime bunları bizim için yapıyor.

Çoğunlukla en yaygın kullanulan sınıflar LocalDate, LocalTime ve LocalDateTime’dır. İsimlerinden de anlayacağınız üzere yerel zaman dilimleri hakkında bilgi vermektedir.

LocalDate ve LocalTime

Yeni Date Api’yi kullanırken karşılaşacağınız ilk sınıflar ve olacaktır. Başka bir sınıuf olan , bu iki sınıfın birleşimi olacak düşünülebilir. Bu sınıflar, tutarlı zaman dilimlerine sahip olan dağıtık sistemlerde zamanı temsil etmek için kullanılabilir.

Yeni Date Api ile gelen sınıflar Fluent Factory tasarım desenini kullanmaktadır. Buradaki Fluent Factory tasarım desenini kısaca bahsetmek gerekirse daha elverişli, okunaklı ve akıcı kod yazmamızı sağlayan bir yöntem. Bir sınıfın metodlarının sürekli sınıfında kendisini döndürdüğünü ve sürekli olarak o sınıfa bir anlam yüklediğinizi düşünün. Daha net olması açısından hemen bir örnek ile pekiştirelim.

LocalDate localDate1 = LocalDate.of(2018, 10, 15); LocalDate localDate2 = LocalDate.of(2018, Month.OCTOBER, 15); System.out.println(localDate1); System.out.println(localDate2);

Yukarıdaki örnekte LocalDate sınıfının of metodunu kullandık iki farklı kullanımı görmektesiniz. Her ikiside aynı çıktıyı vermektedir. of metodu geriye LocalDate döndürür ve dönen değer üzerinde başka LocalDate işlemleri yapmanıza olanak tanır.

LocalDate localDate1 = LocalDate.of(2018, 10, 15).plusDays(5);

Mesela dönen gün değerine 5 gün eklemek gibi düşünebilirsiniz. Sonuç olarak 2018, 10, 20 değerini göreceksiniz.

Yukarıda bahsettiğim Fluent Factory tasarım deseni bu minvalde geliştirilmiştir.

LocalDate sınıfına geri dönecek olursak bazı yardımcı metodlarını göstermek istiyorum.

LocalDateTime localDateTime = LocalDateTime.now(); // yyyy-MM-ddThh:mm:ss LocalDate theDate = localDateTime.toLocalDate(); int month = localDateTime.getMonth().getValue(); int day = localDateTime.getDayOfMonth(); int second = localDateTime.getSecond();

Yukarıda belirli bir tarihin ay, gün ve yıl cinsinden değerlerinin nasıl okunduğu gösterilmiştir.

Aynı şekilde LocalTime sınıfı da aşağıdaki gibi kullanılabilir.

LocalTime localTimeNow = LocalTime.now(); System.out.println(localTimeNow); LocalTime localTime = LocalTime.now(); System.out.println("Saat : " + localTime.getHour()); System.out.println("Dakika : " + localTime.getMinute()); System.out.println("Saniye : " + localTime.getSecond());

Yukarıda localTimeNow nesnesi uygulamanın o an çalıştığı sistem üzerindeki saati verir ve ardından da göreceğiniz üzere saat, dakika ve saniye’nin nasıl alındığını gördük.

Clock

Java 8 ile gelen Clock sınıfı bizlere sistemin bulunduğu bölgeye dayanarak bazı zaman bilgileri sunar.

Clock clock = Clock.systemDefaultZone(); ZoneId zone = clock.getZone(); System.out.println(zone.getId());;

Örneğin yukarıda uygulamanın çalıştığı sistemin hangi bölgede bulunduğunun bilgisini almış olduk. Bu kod parçasını çalıştırdığınızda çıktı olarak Europe/Istanbul verecektir. Çünkü kodu çalıştırdığım sistem Istanbul’da yer almaktadır.

Clock clock = Clock.systemDefaultZone(); System.out.println(clock.millis()); System.out.print(System.currentTimeMillis());

Yukarıda, bulunduğumuz bölge üzerinde anlık saati milisaniye cinsinden göstermiş olduk. Bu tür kullanımları anlık rastgele sayı üretmede kullanabilirsiniz. Her çalıştığı anda farklı sayı üreteceğinden milisaniye bazında aynı değer üretme ihtimali çok düşüktür. Çıktısı long değer olarak görebilirsiniz. Mesela; 1542837957763

Clock ile kullanılan bir başka metod offset^dir. Belirli bir an örnek alınarak o an ile herhangi saat değeri üzerine eklenerek istenilen tarihe gidilir. Mesela şu an dan 5 saat sonrasını istemek ya da “-” değer verdiğiniz 5 saat geriye gitmek gibi düşünebilirsiniz.

Clock clock = Clock.systemDefaultZone(); Clock clock1 = Clock.offset(clock, Duration.ofHours(5)); System.out.println(clock1.instant()); Clock clock2 = Clock.offset(clock, Duration.ZERO); System.out.println(clock2.instant()); Clock clock3 = Clock.offset(clock, Duration.ofHours(-10)); System.out.println(clock3.instant());

Yukarıda göreceğiniz üzere offset metodunun ikinci parametresi olan Duration sınıfının ofHours metoduna saat değeri parametre geçilerek istenilen tarihe gidilebilir. Örneğin ilk örnekte 5 saat sonrasını, ikinci örnekte herhangi bir değişiklik olmadan ve üçüncü örnekte ise 10 saat geri değer döndürür.

Bazen de saati sabit tutmamız gereken durumlar olabilir. Metodunuz zamana bağımlı bir şekilde çıktısı değişen bir metodunuz olduğunu düşünün ve bu metoda test yazarken zamanında sabit kalmasını ve o sabit kalan zamana göre testinizi yazmanız gerekebilir böyle durumlarda zamanı istenilen anda sabit tutabilirsiniz.

Instant instant = Instant.now(); ZoneId zoneId = ZoneId.systemDefault(); Clock clock = Clock.fixed(instant, zoneId); System.out.println(clock.toString());

Çıktı ekranında programın çalıştığı andaki saat dilimini göreceksiniz ve böylelikle saati sabit bir değerde tutmuş olursunuz.

Böylelikle Java 8 ile birlikte gelen Date Api hakkında temel bilgileri gösterdik, daha ayrıntılı bilgi edinmek için faydalandığım kaynaklara buradan ve buradan erişebilirsiniz.

Umarım faydalı olmuştur.

Bir sonraki yazımızda Java’da özel anotasyon yazımını öğreneceğiz, Bildiğiniz üzere anotasyonlar Java 5 versiyonundan itibaren var hem Java 8 öncesindeki kullanımından bahsedeceğiz hemde Java 8 ile birlikte gelen özelliklere değineceğiz.

Hoşçakalın.

14

Yusuf Çakal

Cumhuriyet Üniversitesi - Bilgisayar Mühendisliği (2014-2018)

Genc/Java8KodOrnekleri

22 Temmuz 2019 Tarihi itibariyle Java 8 ile gelen yenilikleri inceleyip bölüm bölüm anlatmaya karar verdim. Toplamda 4 bölümden oluşan bu seriye blog adresim üzerinden ulaşabilirsiniz. Konuları kod örnekleri ile birlikte açıkladım. Bu repoda tüm kod örneklerine toplu şekilde ulaşabilmek amacıyla oluşturuldu.

Eğer Java 8 ile gelen özellikleri detaylı bir şekilde incelemek isterseniz, bölüm bölüm ayrılmış şekilde yazılara aşağıdaki kısımdan ulaşabilirsiniz.

Java 8 Yenilikleri İle İlgili Makaleler

  1. Default Metodlar, Fonksiyonel Arayüz Kavramı, Lambda İfadeleri, Metod Referansı
  2. Yardımcı Fonksiyonel Arayüzler ( Consumer, Predicate, Supplier, Function )
  3. Stream API ve En Çok Kullanılan Metodları (forEach, filter, map, reduce, count gibi)
  4. Optional Sınıfı ve Date&Time API

Destek Çağrısı

Kod içerisinde ya da makaleler içerisinde hatalı bir yer görürseniz yeni bir issue açıp pull request gönderebilir veya mail yoluyla ulaşabilirsiniz. Bu sayade diğer arkadaşlarımızın yanlış öğrenmesini önleyebiliriz. Şimdiden teşekkür ederim.


Sevgiler

Altı aylık geliştirmeden sonra, Oracle, yeni versiyonu Java SE15 açık kaynaklı bir OpenJDK projesi kullanan bir referans uygulaması olarak.

Java SE15 normal bir destek sürümü olarak sınıflandırılır, bir sonraki sürüme kadar yayınlanacak güncellemelerle. Java SE 11 uzun süreli destek ayağı olarak kullanılmalıdır (LTS) ve güncellemeler 2026'ya kadar yayınlanacak. Java 8 LTS, Aralık 2020'ye kadar desteklenecektir. Bir sonraki LTS sürümünün Eylül 2021'de yapılması planlanıyor.

Java SE 15'in başlıca yeni özellikleri

Bu yeni versiyonda, EdDSA RFC 8032 Signature için bir destek işlevi sunuldu, önerilen EdDSA uygulaması donanım platformlarına bağlı değildir, yan kanal saldırılarına karşı korumalıdır (tüm hesaplamaların sabit bir süresi garanti edilir) ve aynı koruma seviyesi ile performans açısından C ile yazılmış mevcut ECDSA uygulamasından daha iyi performans gösterir.

Başka bir değişiklik mühürlü sınıflar ve arayüzler için deneysel destek o diğer sınıflar ve arayüzler tarafından kullanılamazlar devralmak, genişletmek veya dağıtımı kaldırmak için.

Java SE 15'in bu yeni sürümünde ayrıca vurgulanan, doğrudan bayt kodu ile kullanılamayan gizli sınıflar için destek diğer sınıfların. Gizli sınıfların temel kullanımı, çalışma zamanında dinamik olarak sınıflar oluşturan ve bunları yansıtma yoluyla dolaylı olarak kullanan çerçeveler içindir.

Çöp toplayıcı ZGC (Z Çöp Toplayıcı) stabilize edildi ve genel kullanıma hazır olarak kabul edildi. ZGC, çöp toplamadan kaynaklanan gecikmeyi olabildiğince en aza indirmek için pasif modda çalışır (ZGC kullanılırken kesinti süresi 10 ms'yi geçmez) ve boyutları megabayttan çok terabayta kadar değişen küçük ve büyük yığınlarla çalışabilir.

Çöp toplayıcı Shenandoah stabilize oldu ve her yerde olduğu kabul edildi. Shenandoah, Red Hat tarafından geliştirilmiştir ve çöp toplama sırasında duraklama sürelerini azaltan bir algoritma kullanımı ile dikkat çekiyor Java uygulamalarına paralel olarak temizlik yaparken.

Buna ek olarak, aynı zamanda metin blokları desteği stabilize edildi ve dilde girildi: a değişmez dizelerin yeni biçimi Kaçış karakterlerini kullanmadan ve bloktaki orijinal metin biçimlendirmesini korumadan çok satırlı metin verilerini kaynak kodunuza eklemenize olanak tanırlar.

Öte yandan, Eski DatagramSocket API, şu şekilde yeniden çalışıldı: eski java.net.DatagramSocket ve java.net.MulticastSocket uygulamalarının yerini, hata ayıklaması ve bakımı daha kolay olan ve Loom projesi tarafından geliştirilen sanal iş parçacıklarıyla uyumlu modern bir uygulama almıştır.

Mevcut kodla olası bir uyumluluk ihlali durumunda, eski uygulama kaldırılmamıştır ve jdk.net.usePlainDatagramSocketImpl seçeneği kullanılarak etkinleştirilebilir.

Buna ek olarak, örüntü eşleştirmenin ikinci bir deneysel uygulaması önerilmiştir "instanceof" operatöründe, doğrulanmış değere erişmek için hemen bir yerel değişken tanımlamanıza olanak tanır.

Son olarak, equals (), hashCode () ve toString () gibi birkaç düşük seviyeli yöntemi açıkça tanımlama ihtiyacını ortadan kaldırarak, sınıf tanımları için kompakt bir form sağlayan, "kayıt" anahtar kelimesinin ikinci bir deneysel uygulaması da vurgulanmıştır. verilerin yalnızca alanlarda depolandığı durumlarda.

Nihayet öne çıkan diğer değişiklikler:

  • Harici bellek erişim API'sinin ikinci bir taslağı önerildi
  • HotSpot JVM tarafından kilitleme ek yükünü azaltmak için kullanılan Önyargılı Kilitleme optimizasyon tekniği devre dışı bırakıldı ve kullanımdan kaldırıldı.
  • İlerideki bir sürümde kaldırılacak olan eski olduğu bildirilen mekanizmanın RMI aktivasyonu.
  • Java SE 11'de kullanımdan kaldırılan Nashorn JavaScript motoru kaldırıldı.
  • Solaris OS ve SPARC işlemcileri (Solaris / SPARC, Solaris / x64 ve Linux / SPARC) için kaldırılan bağlantı noktaları.

Si onun hakkında daha fazlasını bilmek istiyorsun bu yeni sürüm hakkında. Detayları kontrol edebilirsiniz Aşağıdaki bağlantıda.


nest...

© 2024 Toko Cleax. Seluruh hak cipta.