Java SE 14 sürümü

Altı aylık geliştirme sürecinin ardından Oracle yayınlandı bir platform Java SE14 (Java Platformu, Standard Edition 14), referans uygulaması olarak açık kaynaklı OpenJDK projesi kullanılmaktadır. Java SE 14, Java platformunun önceki sürümleriyle geriye dönük uyumluluğu korur; önceden yazılmış tüm Java projeleri, yeni sürüm altında başlatıldığında değişiklik olmadan çalışacaktır. Kuruluma hazır Java SE 14 yapıları (JDK, JRE ve Sunucu JRE) hazır Linux (x86_64), Windows ve macOS için. OpenJDK projesi tarafından geliştirilen referans uygulaması Java 14 Ticari ürünlerle dinamik bağlantıya izin veren GNU ClassPath istisnaları dışında, GPLv2 lisansı altında tamamen açık kaynaktır.

Java SE 14, genel destek sürümü olarak sınıflandırılmıştır ve bir sonraki sürüme kadar güncellemeleri almaya devam edecektir. Uzun Süreli Destek (LTS) dalı, 11 yılına kadar güncelleme almaya devam edecek olan Java SE 2026 olmalıdır. Java 8'in önceki LTS dalı Aralık 2020'ye kadar desteklenecektir. Bir sonraki LTS sürümünün Eylül 2021'de yayınlanması planlanıyor. Java 10'un çıkışıyla birlikte projenin yeni bir geliştirme sürecine geçtiğini, bunun da yeni sürümlerin oluşumu için daha kısa bir döngü anlamına geldiğini hatırlatalım. Yeni işlevsellik artık sürekli olarak güncellenen, hazır değişiklikleri içeren ve yeni sürümleri dengelemek için her altı ayda bir dallara ayrılan ana dalda geliştirilmektedir.

Of yenilikler Java 14 kimse yapamaz işaret:

  • Deneysel destek eklendi desen eşleştirme kontrol edilen değere erişmek için hemen bir yerel değişken tanımlamanıza olanak tanıyan "instanceof" operatöründe. Örneğin, “String s = (String) obj” ifadesini açıkça tanımlamadan hemen “if (obj exampleof String s && s.length() > 5) {.. s.contains(..) ..}” yazabilirsiniz.

    Oldu:

    if (obj örneğinin Grubu) {
    Grup grubu = (Grup)obj;
    var girişleri = group.getEntries();
    }

    Artık “Grup grubu = (Grup) obj” tanımı olmadan da yapabilirsiniz:

    if (obj Grup grubunun örneği) {
    var girişleri = group.getEntries();
    }

  • Yeni anahtar kelime için deneysel destek eklendi "kayıt", verilerin yalnızca davranışı değişmeyen alanlarda depolandığı durumlarda equals(), hashCode() ve toString() gibi çeşitli düşük seviyeli yöntemleri açıkça tanımlamaktan kaçınmanıza olanak tanıyarak, sınıfları tanımlamak için kompakt bir form sağlar. Bir sınıf equals(), hashCode() ve toString() yöntemlerinin standart uygulamalarını kullandığında, bunların açık tanımları olmadan da bunu yapabilir:

    genel kayıt BankTransaction(LocalDate tarihi,
    çift ​​miktar
    Dize açıklaması) {}

    Bu bildirim, yapıcı ve alıcı yöntemlerine ek olarak equals(), hashCode() ve toString() yöntemlerinin uygulamalarını otomatik olarak ekleyecektir.

  • Standartlaştırılmış ve "break" operatörünün belirtilmesini gerektirmeyen, tekrarlanan etiketleri birleştirmenize olanak tanıyan ve yalnızca bir operatör biçiminde değil aynı zamanda bir operatör biçiminde de kullanılabilen yeni bir "anahtar" ifadesi biçimi desteği varsayılan olarak etkindir. ifade.

    var log = anahtar (olay) {
    case PLAY -> “Kullanıcı oynat butonunu tetikledi”;
    durum DUR, DURAKLAT -> “Kullanıcının ara vermesi gerekiyor”;
    varsayılan -> {
    String mesajı = event.toString();
    LocalDateTime şimdi = LocalDateTime.now();
    "Bilinmeyen olay" sonucunu verir + mesaj +
    » oturum açtınız » + şimdi;
    }
    };

  • Genişletilmiş deneysel destek metin blokları — karakter kaçışı kullanmadan ve bloktaki metnin orijinal formatını koruyarak çok satırlı metin verilerini kaynak koduna eklemenize olanak tanıyan yeni bir dize değişmezleri biçimi. Blok üç çift tırnak işaretiyle çerçevelenmiştir. Java 14'te, metin blokları artık tek bir boşluk tanımlamak için "\s" çıkış dizisini ve sonraki satırla birleştirmek için "\" çıkış dizisini desteklemektedir (çok uzun bir satır yazdırmanız gerektiğinde yeni satırları göz ardı etmek). Örneğin kod yerine

    Dize HTML = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 geldi!\" » +
    "\n\t" + " » +
    "\n" + " ";

    şunları belirtebilirsiniz:

    Dize HTML = """


    »Java 1\
    burada!

    """;

  • İstisnalar meydana geldiğinde teşhisin bilgi içeriği genişletildi NullPointerException. Daha önce hata mesajı yalnızca satır numarasına atıfta bulunurken, artık hangi yöntemin istisnaya neden olduğunu ayrıntılarıyla anlatıyor. Gelişmiş tanılama şu anda yalnızca "-XX:+ShowCodeDetailsInExceptionMessages" bayrağıyla başlatıldığında etkindir. Örneğin bu bayrağı belirtirken satırdaki istisna

    var name = user.getLocation().getCity().getName();

    bir mesajla sonuçlanacak

    "Ana" Java.lang.NullPointerException iş parçacığında istisna: "Location.getCity()" çağrılamıyor
    çünkü "User.getLocation()"ın dönüş değeri null
    NullPointerExample.main(NullPointerExample.java:5):5) adresinde

    bu da Location.getCity() yönteminin çağrılmadığını ve User.getLocation() yönteminin null değerini döndürdüğünü açıkça ortaya koyuyor.

  • uygulandı Bağımsız Java uygulamaları için paketler oluşturmanıza olanak tanıyan jpackage yardımcı programının önizlemesi. Yardımcı program, JavaFX'in javapackager'ını temel alır ve çeşitli platformlara özgü formatlarda paketler oluşturmanıza olanak tanır (Windows için msi ve exe, macOS için pkg ve dmg, Linux için deb ve rpm). Paketler gerekli tüm bağımlılıkları içerir.
  • G1 çöp toplayıcısına katma mimariyi kullanarak büyük sistemler üzerinde çalışmanın özelliklerini dikkate alan yeni bir bellek ayırma mekanizması numa. Yeni bellek ayırıcı, “+XX:+UseNUMA” bayrağı kullanılarak etkinleştirilir ve NUMA sistemlerinin performansını önemli ölçüde artırabilir.
  • Katma JFR (JDK Uçuş Kaydedici) olaylarının anında izlenmesine yönelik API, örneğin sürekli izlemenin organize edilmesi.
  • Katma kalıcı belleğe (NVM) referans veren eşlenmiş bayt arabellekleri (MappedByteBuffer) oluşturmak için yeni modlar (READ_ONLY_SYNC, WRITE_ONLY_SYNC) sunan jdk.nio.mapmode modülü.
  • uygulandı Java uygulamalarının yeni MemorySegment, MemoryAddress ve MemoryLayout soyutlamalarını işleyerek Java yığını dışındaki bellek bölgelerine güvenli ve verimli bir şekilde erişmesine olanak tanıyan Yabancı Bellek Erişimi API'sinin bir önizlemesi.
  • Duyuruldu Solaris OS ve SPARC işlemcileri (Solaris/SPARC, Solaris/x64 ve Linux/SPARC) için kullanımdan kaldırılan bağlantı noktaları, bu bağlantı noktalarının gelecekte kaldırılması amacıyla. Bu bağlantı noktalarının kullanımdan kaldırılması, topluluğun Solaris ve SPARC'a özgü özellikleri korumakla zaman kaybetmeden yeni OpenJDK özelliklerinin geliştirilmesini hızlandırmasına olanak tanıyacak.
  • silindi iki yıl önce geçersiz olarak işaretlenen ve bakımı yapılmadan kalan CMS (Eşzamanlı İşaretleme Süpürme) çöp toplayıcı (CMS'nin yerini uzun zaman önce G1 çöp toplayıcı aldı). Ayrıca, объявлено ParallelScavenge ve SerialOld çöp toplama algoritmalarının bir kombinasyonunun kullanımı kullanımdan kaldırıldı ("-XX:+UseParallelGC -XX:-UseParallelOldGC" seçenekleriyle çalıştırın).
  • ZGC (Z Garbage Collector) çöp toplayıcı için deneysel destek macOS ve Windows platformlarında sağlanmıştır (daha önce yalnızca Linux'ta destekleniyordu). ZGC pasif modda çalışır, çöp toplamadan kaynaklanan gecikmeyi mümkün olduğunca en aza indirir (ZGC kullanıldığında durma süresi 10 ms'yi geçmez) ve boyutları birkaç yüz megabayttan birçok terabayta kadar değişen hem küçük hem de büyük yığınlarla çalışabilir.
  • Kaldırıldı Pack200 algoritmasını kullanarak JAR dosyalarını sıkıştırmak için araç seti ve API.

Kaynak: opennet.ru

Yorum ekle