Java 9 burada: Bilmeniz gereken her şey

Java 9 - resmi olarak, Java Platform Standard Edition sürüm 9 - sonunda burada ve geliştiricilerin Java Geliştirme Kiti (JDK) indirmesi için hazır.

Tartışmalı olsa da birkaç önemli yeni özelliğe sahiptir, ancak aynı zamanda eski Java sunumu stilinin sonuncusudur.

Java 9 JDK nereden indirilir

Oracle, geliştiriciler tarafından indirilmek üzere Java SE 9 JDK'yı ve belgeleri yayınladı.

Java 9'daki temel yeni özellikler

Java SE 8'den yaklaşık üç yıl sonra piyasaya sürülen Java SE 9, birçok önemli mimari değişikliğin yanı sıra bir dizi iyileştirmeye sahip.

Java 9'un modülerliği oyunun kurallarını değiştirir

Project Jigsaw'a dayanan yeni, tartışmalı modülerlik yetenekleri, daha muhafazakar dükkanlar modülerliğin olgunlaşmasını beklemeye karar verse bile, JDK 9'un şimdi neler sunabileceğini görmek isteyen son teknoloji Java mağazalarının ilgisini çekecektir.

Modülerlik - Java Platform Modül Sistemi biçiminde - JDK'yı çalıştırma, derleme veya oluşturma sırasında birleştirmek için bir dizi modüle böler. Modülerlik, modüller arasındaki bağımlılıkların anlaşılmasını sağlayan "geçişli" bir değişim olarak adlandırılmıştır.

Java 9'un modülerliğinin, geliştiricilerin karmaşık uygulamaları daha kolay bir araya getirmesine ve sürdürmesine izin vermesi bekleniyor. Ayrıca, güvenlik ve performans iyileştirilirken Java'nın daha küçük cihazlara daha iyi ölçeklenebilmesini sağlamalıdır.

Java 9'un modülerlik yönleri, uygulama paketlemeyi, JDK'nın kendisini modülerleştirmeyi ve kaynak kodunu modüller halinde yeniden düzenlemeyi içerir. Derleme sistemi, derleme sırasında modülleri derlemek ve modül sınırlarını zorlamak için geliştirilmiştir. JDK ve Java Runtime Environment (JRE) görüntüleri, modülleri işlemek için yeniden yapılandırılır. Ayrıca, JavaFX UI kontrollerine ve CSS API'lerine artık modülerlik için erişilebilir.

Bir dizi yapılandırma desteklenir; sonuç olarak ölçeklenebilirlik, güvenlik ve uygulama performansı iyileştirilmelidir. Java'nın küçük cihazlara daha kolay ölçeklendirilmesi, modüler çabanın temel bir faktörüdür.

Modülerlik sayesinde, geliştiriciler hem Java SE (Standard Edition) hem de Java EE (Enterprise Edition) için kitaplıklar ve büyük uygulamaları daha iyi oluşturabilir ve sürdürebilir. Ancak Java 9'un geliştirilmesi sırasında Oracle, IBM, Red Hat ve diğerleri, platformda bu kadar radikal bir değişikliğin tam olarak nasıl yapılacağı konusunda büyük anlaşmazlıklar yaşadılar. Modül sisteminin kendisi Mayıs ayında reddedildi, ancak ilerleme kaydedildikten sonra Haziran ayında ikinci bir oylamayla onaylandı.

Başlıca Java satıcıları arasındaki anlaşma olsa bile, modülerliğin Java geliştiricilerine çok faydası olup olmayacağı konusunda tartışmalar sürüyor, bazı uzmanlar evet, diğerleri hayır diyor. Ne olursa olsun, Java 9 artık modüler hale getirildi.

Modülerleştirilmiş Java 9'a geçişi kolaylaştırmak için Java 9, JRE tarafından sınıfları ve kaynak dosyalarını aramak için kullanılan, sınıf yolundaki kod için yasa dışı yansıtıcı erişime izin verir. Bu özellik Java 9'dan sonra izin verilmeyecektir.

Java 9 kodu için derleyici geliştirmeleri

Java 9 yükseltmesi, kod derlemek için çeşitli yeni yetenekler sunar; bunların başında vaktinden önce (AoT) derleme gelir. Hala deneysel bir aşamada olan bu özellik, Java sınıflarının sanal makinede başlatılmadan önce yerel koda derlenmesini sağlar. Bu özellik, en yüksek performans üzerinde sınırlı etki ile hem küçük hem de büyük uygulamaların başlatma süresini iyileştirmek için tasarlanmıştır.

Tam zamanında (JIT) derleyiciler hızlıdır, ancak Java programları o kadar büyümüştür ki, JIT'in tamamen ısınması uzun zaman alır ve bazı Java yöntemlerini derlenmemiş ve performansı zayıflatır. Zamanın ötesinde derleme, bu sorunları ele almak içindir.

Ancak Java teknoloji satıcısı Excelsior'un pazarlama direktörü Dmitry Leskov, zamanın ilerisindeki derleme teknolojisinin yeterince olgun olmadığından endişeleniyor ve Oracle'ın daha sağlam bir sürüm için Java 10'a kadar beklemesini diliyor.

Java 9 ayrıca Oracle'ın akıllı derleme dağıtımının ikinci aşamasını da sunar. Bu özellik, s javac aracın kararlılığını ve taşınabilirliğini geliştirmeyi içerir,  böylece varsayılan olarak JVM'de (Java Sanal Makinesi) kullanılabilir. Araç, JDK dışındaki büyük projelerde de kullanılabilmesi için genelleştirilecektir. JDK 9 ayrıca, javac Java 9 programlarını Java'nın bazı eski sürümlerinde çalışacak şekilde derleyebilmesi için derleyiciyi de güncellemiştir  .

Bir başka yeni - ancak deneysel - derleme özelliği, Java düzeyinde JVM Derleyici Arayüzüdür (JVMCI). Bu arayüz, Java ile yazılmış bir derleyicinin JVM tarafından dinamik bir derleyici olarak kullanılmasına izin verir. JVMCI'nin API'si, VM yapılarına erişmek, derlenmiş kod yüklemek ve JVM derleme sistemine eklemek için mekanizmalar sağlar.

Java'da bir JVM derleyicisi yazmak, C veya C ++ ile yazılmış mevcut derleyicilere göre bakımı ve iyileştirmesi daha kolay olan yüksek kaliteli bir derleyiciye izin vermelidir. Sonuç olarak, Java'da yazılan derleyicilerin bakımı ve iyileştirilmesi daha kolay olmalıdır. Java içi derleyicileri etkinleştirmeye yönelik diğer mevcut çabalar arasında Graal Project ve Project Metropolis bulunmaktadır.

Yeni bir derleyici denetim özelliği, JVM derleyicilerinin ayrıntılı ve yönteme bağlı denetimini sağlamayı amaçlayarak geliştiricilerin çalışma zamanında derleyici denetim seçeneklerini performans düşüşü olmadan değiştirmesine olanak tanır. Araç ayrıca JVM derleyici hataları için geçici çözümler sağlar.

REPL sonunda Java 9'a geliyor

Java 9, bir okuma-değerlendirme-yazdırma döngüsü (REPL) aracı içerir - bu sürümde, Project Kulia kapsamında yıllarca süren geliştirmeden sonra, Java için gerçek olmaya başlayan bir başka uzun vadeli hedef.

JShell olarak adlandırılan Java 9'un REPL, bildirimsel ifadeleri ve ifadeleri etkileşimli olarak değerlendirir. Geliştiriciler, derlemeden önce sadece bazı kod satırları girerek programlar hakkında geri bildirim alabilirler.

Komut satırı aracının yetenekleri, sekme tamamlamayı ve gerekli terminal noktalı virgüllerinin otomatik olarak eklenmesini içerir. JShell API, IDE'lerde ve diğer araçlarda jShell işlevselliğine izin verir, ancak aracın kendisi bir IDE değildir.

REPL'in olmaması, okulların Java'dan uzaklaşmaları için bir neden olarak gösterildi. (Python ve Scala gibi dillerin uzun süredir bir REPL'i vardır.) Ancak Scala dilinin kurucusu Martin Odersky, Java'nın ifade yönelimli, REPL'lerin ifade yönelimli olduğunu söyleyerek, Java'daki bir REPL'in kullanışlılığını sorguluyor.

Java 9'da Akışlar API'sinde yapılan geliştirmeler

Java'daki akışlar, geliştiricilerin hesaplamaları ifade etmelerine izin verir, böylece veri paralelliği verimli bir şekilde kullanılabilir. Java 8'deki Akış özelliği, çok çekirdekli mimarilerden yararlanırken verileri bildirimli olarak işlemek içindir.

Java 9'da, Akışlar API'si, Akıştan koşullu olarak öğe alıp bırakmak, Akış öğeleri üzerinden yinelemek ve Akış kaynakları olarak hizmet verebilecek Java SE API'leri kümesini genişletirken null yapılabilir bir değerden bir akış oluşturmak için yöntemler ekler.

Kod önbelleği Java 9'a bölünebilir

JDK 9, performansı artırmak ve hassas kilitleme gibi uzantılara izin vermek için kod önbelleğinin segmentlere ayrılmasına izin verir. Yöntem dışı kodu atlayan özel yineleyiciler nedeniyle sonuçlar tarama sürelerinde iyileştirilmelidir; yöntemsiz, profilli ve profilli olmayan kodu ayırmak; ve bazı kıyaslamalar için uygulama süresinin iyileştirilmesi. 

Project Nashorn aracılığıyla Java 9'da daha iyi JavaScript desteği

Java için hafif bir JavaScript çalışma zamanı sağlayan Project Nashorn, JDK 9'da geliştiriliyor. Project Nashorn, Netscape'te başlatılan Rhino projesinin ardından Java'da yüksek performanslı, ancak hafif bir JavaScript çalışma zamanı uygulama çabasıydı. Nashorn Projesi, JavaScript'in Java uygulamalarına yerleştirilmesini sağlamakla görevlendirildi. Java'ya JDK 8'de bir JavaScript motoru sağladı.

JDK 9, Nashorn'un ECMAScript sözdizimi ağacı için bir ayrıştırıcı API içerir. API, Project Nashorn'un dahili uygulama sınıflarına bağlı olmaksızın IDE'ler ve sunucu tarafı çerçeveleri tarafından ECMAScript kod analizine olanak tanır.

HTTP / 2 istemci API'si Java 9'a geliyor

Beta HTTP / 2 istemci API, Java'da web'in çekirdek HTTP protokolüne yükseltmeyi uygulayan JDK 9'a geldi. WebSocket, API tarafından da desteklenmektedir.

HTTP / 2 API, artık kullanılmayan protokollerle tasarlanma, HTTP / 1'den önce olma, çok soyut olma ve kullanımının zor olması gibi sorunları olan HttpURLConnection API'nin yerini alabilir.

Java 9'da iyileştirilmiş HTML5 ve Unicode desteği

JDK 9'da, Javadoc dokümantasyon aracı HTML5 biçimlendirmesi oluşturacak şekilde geliştirilmiştir. 8.000 karakter, 10 blok ve altı komut dosyası ekleyen Unicode 8.0 kodlama standardı da desteklenmektedir.

DTLS güvenlik API'si Java 9'a eklendi

Güvenlik için Java 9, DTLS (Datagram Aktarım Katmanı Güvenliği) için bir API ekler. Protokol, istemci / sunucu iletişimlerinde gizli dinlemeyi, kurcalanmayı ve mesaj sahteciliğini önlemek için tasarlanmıştır. Hem istemci hem de sunucu modları için bir uygulama sağlanır.

Java 9'un kullanımdan kaldırdığı ve kaldırdığı

Java 9, artık revaçta olmayan bazı özellikleri kullanımdan kaldırır veya kaldırır. Bunların arasında en önemlisi, kullanımdan kaldırılan Applet API'sidir. Artık güvenlik bilincine sahip tarayıcı üreticileri, Java tarayıcı eklentileri desteğini kaldırdığı için modası geçti. HTML5'in ortaya çıkışı, onların ölümüne de yardımcı oldu. Artık geliştiriciler, uygulamaları bir tarayıcıdan veya yüklenebilir uygulamalardan başlatmak için Java Web Start gibi alternatiflere yönlendiriliyor. 

Appletviewer aracı da kullanımdan kaldırılıyor.

Java 9 ayrıca, gelecekteki bir sürümde sona erdirme desteğiyle Concurrent Mark Sweep (CMS) çöp toplayıcısını kullanımdan kaldırır. Amaç, HotSpot sanal makinesindeki diğer çöp toplayıcıların geliştirilmesini hızlandırmaktır. Düşük duraklamalı G1 çöp toplayıcı, CMS için uzun vadeli bir yedek olacak şekilde tasarlanmıştır.

Bu arada, JDK 8'de daha önce kullanımdan kaldırılan çöp toplama kombinasyonları, JDK 9'da kaldırılmıştır. Bunlar, çöp toplayıcı kod tabanına ekstra karmaşıklık ekleyen Artımlı CMS, ParNew + SerialOld ve DefNew + CMS gibi nadiren kullanılan kombinasyonları içerir.

Java 9 ayrıca, büyük kod tabanlarının tüy bırakma uyarılarından arındırılmasına yardımcı olmak için içe aktarma ifadelerindeki Java uyarılarını kaldırır. Bu kod tabanlarıyla, kullanımdan kaldırılmış işlevsellik genellikle bir süre için desteklenmelidir, ancak kullanımdan kaldırılmış bir yapının içe aktarılması, yapının kullanımları kasıtlıysa ve bastırılmışsa bir uyarı mesajı gerektirmez.

Java 9'da ayrıca Çoklu JRE (mJRE) özelliği aracılığıyla JRE'yi başlatma zamanında seçme yeteneği de kaldırılmıştır. Yetenek nadiren kullanıldı, Java başlatıcısının uygulanmasını karmaşık hale getirdi ve JDK 5'te ilk kez piyasaya çıktığında hiçbir zaman tam olarak belgelenmedi.

Oracle, JVM'de yerini alan JVM TI (Araç Arayüzü) hprof (Yığın Profil Oluşturma) aracısını kaldırdı. Üstün yığın görselleştiriciler ve çözümleyiciler tarafından kullanılmayan jhat aracı da kaldırıldı.

Java 9, yeni Java 9 satırı başladığında satırının sonu

Java 9'un tüm yeni yeteneklerle büyük bir patlama yaptığını söyleyebilirsiniz. Oracle kısa süre önce, tanımı ve büyük sürümler arasında geçen süre açısından Java 9'un türünün son örneği olduğunu açıkladı.

Şu andan itibaren, Java'nın altı aylık bir sürüm kadansına sahip olması ve bir sonraki ana sürümün Mart 2018'de Java 18.3 olarak adlandırılması ve ardından altı ay sonra Java 18.9'un gelmesi planlanıyor.

Java'nın yeni sürüm temposu, JDK 9'un uzun vadeli bir destek sürümü olarak belirlenmeyeceği anlamına da geliyor. Bunun yerine, bir sonraki uzun vadeli sürüm Java 18.9 olacaktır.

Java'nın daha hızlı yayınlanma hızı, geliştiricilerin büyük sürümler için uzun süre beklemek zorunda kalmayacağı anlamına gelir. Ayrıca geliştiricilerin Java 9'u ve "olgunlaşmamış" modülerlik özelliklerini atlayıp yeni sürüm için altı ay bekleyeceği anlamına da gelebilir; Java araçları satıcısı ZeroTurnaround'da Java savunuculuğu direktörü Simon Maple, ilginçlikler, dedi.