Bu sefer atlanan bilet yok! Java 10 resmi olarak yayınlandı ve bu yeni özellikleri getiriyor

Takip etmek için tıklayın InfoQ , Yapışkan resmi hesap

Programcının saat 8'de teknik kahvaltısını alın

Yazar | Zhang Jianfeng

Editör | Guo Lei

21 Mart Pekin saatinde Oracle, Java 10'un resmi sürümünü resmi olarak duyurdu. Bu, Java'nın ana sürüm döngüsünden sonraki ilk resmi sürümdür (ayrıntılar için buraya bakın) ve çok dikkate değer. Hemen indirmek için aşağıdaki adrese tıklayabilirsiniz:

Geçen yılın Eylül ayında Oracle, Java ana sürüm döngüsünü orijinal 2-3 yıldan altı ayda bir ana sürüme ayarladı. Sürüm numarası hala orijinal seri numarası olan Java 8, Java 9, Java 10, Java 11 .....

Ancak öncekinden farklı olarak, yayınlanma zamanını ve bunun bir LTS (uzun vadeli destek sürümü) olup olmadığını gösteren bir sürüm numarası da vardır.Örneğin, Java 10, 18.3'e karşılık gelir. Aşağıdaki örnek:

/ jdk-10 / bin $ ./java -version openjdk version "10" 2018-03-20 OpenJDK Runtime Environment 18.3 (build 10 + 46) OpenJDK 64-Bit Server VM 18.3 (build 10 + 46, karma mod)

Java 9 ve Java 10'un LTS sürümleri olmadığı unutulmamalıdır. Önceki büyük Java sürüm yükseltmelerinden farklı olarak, bu ikisinin yalnızca yaklaşık altı aylık bir geliştirme ve bakım süresi vardır. Gelecekteki Java 11, 18.9 LTS, Java 8'den sonraki ilk LTS sürümüdür (Oracle gibi ticari şirketlerden uzun vadeli destek hizmetleri).

Bu sürüm modeli yaygın olarak kullanılmaktadır.Başarılı bir örnek Ubuntu Linux işletim sistemidir.Çift sayılı yılların Nisan ayındaki yayın sürümü, uzun süre desteklenecek olan LTS'dir. Örneğin, Nisan 2014'te yayınlanan 14.04 LTS, Canonical ve topluluk 2019'a kadar destek veriyor. Benzer şekilde, Node.js, Linux çekirdeği ve Firefox da benzer yayınlama yöntemlerini kullanır.

Java'nın gelecekteki sürüm döngüsünde, her altı ayda bir ana sürüm ve her üç ayda bir ara özellikli bir sürüm yayınlanacaktır. Bu şekilde, bazı temel özellikler mümkün olan en kısa sürede JDK'ya dahil edilebilir ve geliştirici geri bildirimleri hızlı bir şekilde alınabilir.Java 9'un çıkış tarihini iki kez ertelemek zorunda kalması nedeniyle bir dereceye kadar utançtan kurtulabilir.

Aşağıdaki şekil, Oracle tarafından 2017 JavaOne konferansında açıklanan gelecekteki Java sürümlerinin yayınlanma ve destek döngüsünü göstermektedir.

Java 10'daki yenilikler

Bu sefer piyasaya sürülen Java 10 çok fazla yeni özelliğe sahip değil.

Resmi web sitesindeki halka açık bilgilere göre, aşağıdaki geliştirmeleri getiren toplam 12 JEP (JDK Geliştirme Teklifi özellik geliştirme önerileri) vardır:

  • JEP286, yerel değişken türü çıkarımı var.

  • JEP296, geliştirme ve yönetim sürecini basitleştirmek için Mercurial tarafından orijinal olarak yönetilen birçok JDK depo kodunu tek bir depoda birleştirir.

  • JEP304, birleşik bir çöp toplama arayüzü.

  • G1 çöp toplayıcının paralel tam çöp toplama olan JEP307, en kötü durum gecikmesini iyileştirmek için paralelliği gerçekleştirir.

  • JEP310, Uygulama Sınıfı Veri (AppCDS) paylaşımı, işlemler arasında ortak sınıf meta verilerini paylaşarak bellek ayak izini ve başlatma süresini azaltır.

  • JEP312, ThreadLocal el sıkışma etkileşimi. Global JVM kayıt noktasına (Kayıt Noktası) girilmeden, iş parçacığı üzerinde bir geri arama yürütülür. Optimizasyon, tüm iş parçacıklarını veya durmaksızın durdurmak yerine yalnızca tek bir iş parçacığını durdurabilir.

  • JEP313, JDK'da bulunan javah aracını kaldırın. Bunun yerine javac -h kullanabilirsiniz.

  • JEP314, ek Unicode dil etiketi uzantıları kullanarak.

  • JEP317, kullanıcı tarafından belirlenen yedek bellek cihazına yığın bellek kullanımı tahsis edebilir.

  • Graal'ın Java tabanlı derleyicisini kullanan JEP317, performansı artırmak için Java kodunu yerel koda önceden derleyebilir.

  • JEP318, OpenJDK'da bir dizi varsayılan kök sertifika yetkilisi sertifikası sağlar. Açık kaynaklı, şu anda Oracle tarafından sağlanan Java SE kök sertifikası, böylece OpenJDK, geliştiricilerin kullanması için daha uygundur.

  • JEP322, zamana dayalı bir yayın sürümü, yani yukarıda belirtilen sürüm döngüsü. Sürüm numarası \ $ FEATURE. \ $ INTERIM. \ $ UPDATE. \ $ PATCH, ana sürüm, ara sürüm, yükseltme paketi ve yama sürümüdür.

  • Bazı özelliklerin açıklaması

    1. Değişken türü çıkarımı.

    Bu dil özelliği, bazı diğer dillerde (C #, JavaScript) ve JRE (Scala ve Kotlin) tabanlı bazı dillerde zaten eklenmiştir.

    Java dili uzun süredir düşünülüyordu ve JEP286 teklifi resmi olarak 2016 gibi erken bir tarihte sunuldu. Daha sonra bir kamu geliştirici anketi yapıldı ve en çok öneri alan, Scala benzeri bir çözümün benimsenmesi, yaklaşık yarısını oluşturan "val ve var'ı aynı anda kullanmak" ve "yalnızca var kullanarak" yaklaşık dörtte biriydi. . Daha sonra, dikkatli bir değerlendirmeden sonra Oracle, yalnızca var anahtar sözcüğünü kullanan bir çözümü benimsedi.

    Bu özellikle, geliştiriciler şu şekilde kod yazdıklarında:

    Dizi Listesi < Dize > myList = new ArrayList < Dize >

    Önceki tür bildirimini atlayabilirsiniz ve yalnızca

    var list = new ArrayList < Dize >

    Derleyici, liste değişkeninin türünü otomatik olarak çıkaracaktır. Zincir ifadeleri için de uygundur:

    var stream = blocks.stream; ... int maxWeight = stream.filter (b- > b.getColor == MAVİ) .mapToInt (Block :: getWeight) .max;

    Geliştiricilerin Akış türünü bildirmesi ve içe aktarması gerekmez, akışı yalnızca bir ara değişken olarak kullanır ve geliştirme verimliliğini artırmak için var anahtar sözcüğünü kullanır.

    Ancak, var kullanımının birçok sınırlaması vardır, bunlara yöntem parametre türlerini çıkarmak için kullanılamaz, yalnızca yöntem blokları gibi yerel değişkenler için kullanılabilir ve sınıf değişkeni bildirimleri vb. İçin kullanılamaz.

    Ek olarak, ben şahsen geliştiriciler için değişken türlerinin açık bildiriminin daha kapsamlı programlama dili bilgisi sağlayacağını düşünüyorum, bu da kodu anlamak ve sürdürmek için çok yararlıdır. Var yaygın olarak kullanıldıktan sonra, IDE desteği olmadan üçüncü taraf kodunu okuyan geliştiriciler, program akışının yürütülmesinin anlaşılmasında bazı engellere neden olacaktır. Bu nedenle değişken türlerini olabildiğince açık bir şekilde yazmanızı öneririm.Programın okunabilirliği ve sürdürülebilirliği bazen daha önemlidir.

    2. Birleşik GC arayüzü

    JDK10 kodunda, yol openjdk / src / hotspot / share / gc / şeklindedir ve her GC uygulaması paylaşılan koda bağlıdır. GC, mevcut varsayılan G1'in yanı sıra klasik Seri, Paralel, CMS ve diğer GC uygulamalarını içerir.

    3. Uygulama verisi (AppCDS) paylaşımı

    Orijinal önyükleme sınıfı temelinde, CDS özelliği, uygulama sınıfları için CDS (Uygulama Sınıfı-Veri Paylaşımı) desteği eklemek üzere genişletilmiştir.

    İlke şudur: sınıfları yükleme işlemi başlangıçta kaydedilir, bir metin dosyasına yazılır ve başlangıç metni, yeniden başlatıldığında doğrudan okunur ve yüklenir. Uygulama ortamında büyük bir değişiklik olmazsa, başlangıç hızının artacağını hayal edin.

    Hazırda bekletme sürecini işletim sistemine benzer bir şekilde hayal edebiliyoruz.Bilgisayar kapatıldığında mevcut uygulama ortamı diske yazılıyor ve tekrar kullanıldığında ortam hızlı bir şekilde eski haline getirilebiliyor.

    Bilgisayarımda aşağıdaki uygulama başlatma deneyini yapıyorum.

    Önce Java ortamı olarak JDK10 önizleme sürümünü kullanarak wildfly 12 uygulama sunucusunu konuşlandırın. Ek olarak, yüklenen sınıfların günlük kayıtlarını AppCDS'nin tanıyabileceği bir biçime dönüştürmek için kullanılan bir cl4cds aracını kullanmanız gerekir.

    A. Wildfly'ı kurun ve Angularjs, rest, jpa tam uygulama teknolojisi yığını içeren bir uygulamayı dağıtın, ısındıktan sonra üç kez başlayın ve dağıtım süresini kaydedin

    6716ms, 6702ms, 6613ms'dir ve ortalama süre 6677ms'dir.

    B. Ortam değişkenleri ekleyin ve başlangıç günlüğünü başlatın, dışa aktarın

    dışa aktar PREPEND_JAVA_OPTS = "- Xlog: sınıf + yük = hata ayıklama: file = / tmp / wildfly.classtrace"

    C. AppCDS'nin tanıyabileceği cls biçimini oluşturmak için cl4cds aracını kullanın

    / jdk-10 / bin / java -cp src / sınıflar / io.simonis.cl4cds /tmp/wildfly.classtrace /tmp/wildfly.cls

    İçeriği görmek için dosyayı açın:

    java / lang / Nesne kimliği: 0x0000000100000eb0 java / io / Serileştirilebilir kimlik: 0x0000000100001090 java / lang / Karşılaştırılabilir kimlik: 0x0000000100001268 java / lang / CharSequence kimliği: 0x0000000100001440 ...... org / hibernate / type / AssociationType kimliği: 0x200000000100c610x0000000100000eb0 arabirimleri: 0x0000000100a00d10 kaynak: /home/shihang/work/jboss/wildfly/dist/target/wildfly-12.0.0.Final/modules/system/layers/base/org/hibernate/main/hibernate-core-5.1.10 .Final.jar org / hibernate / type / AbstractType id: 0x0000000100c613e0 super: 0x0000000100000eb0 arayüzler: 0x0000000100a00d10 kaynak: /home/shihang/work/jboss/wildfly/dist/target/wildfly-12.0.0.Final/modules/system/layers /base/org/hibernate/main/hibernate-core-5.1.10.Final.jar org / hibernate / type / AnyType kimliği: 0x0000000100c61820 super: 0x0000000100c613e0 arayüzler: 0x0000000100c610300x0000000100c61208 kaynak: / home / shihang / work / jboss / wildfly dist / target / wildfly-12.0.0.Final / modules / system / layer / base / org / hibernate / main / hibernate-core-5.1.10.Final.jar ...

    Bu dosya, sınıfın yükleme bilgilerini işaretlemek için kullanılır.

    D. Yaban sineğini başlatmak, başlatma sürecini simüle etmek ve başlangıç bilgilerini kaydetmek için jsa dosyasını dışa aktarmak için ortam değişkenlerini kullanın.

    dışa aktar PREPEND_JAVA_OPTS = "- Xshare: dump -XX: + UseAppCDS -XX: SharedClassListFile = / tmp / wildfly.cls -XX: + UnlockDiagnosticVMOptions -XX: SharedArchiveFile = / tmp / wildfly.jsa"

    Oluşturulan dosya bilgilerini kontrol edin, jsa dosyası daha büyük bir hacme sahiptir.

    / opt / work / cl4cds $ ls -l /tmp/wildfly.* -rw-rw-r-- 1 shihang shihang 8413843 Mar 2011:07 /tmp/wildfly.classtrace -rw-rw-r-- 1 shihang shihang 4132654 Mar 2011:11 /tmp/wildfly.cls -r - r - r-- 1 shihang shihang 177659904 Mar 2011:13 /tmp/wildfly.jsa

    E. Uygulama sunucusunu başlatmak için jsa dosyasını kullanın

    dışa aktar PREPEND_JAVA_OPTS = "- Xshare: on -XX: + UseAppCDS -XX: + UnlockDiagnosticVMOptions -XX: SharedArchiveFile = / tmp / wildfly.jsa"

    Başlangıçtan sonra, kayıt süresi 5535ms, 5333ms, 5225ms ve ortalama 5364ms'dir.Önceki 6677ms ile karşılaştırıldığında, başlangıç zamanının yaklaşık% 20 arttığı hesaplanabilir.

    Bu verimlilik artışı, bulut uygulama dağıtımı için çok değerlidir.

    Yukarıdaki deneysel yöntemler için teknik bloga bakın.

    4. JEP314, ek Unicode dil etiketi uzantısı kullanarak.

    JDK10, IETF tanımlı dil kümesi için belirtim belgesi olan Unicode BCP 47 için daha fazla desteğe sahiptir. Genişletilmiş etiketleri kullanarak, gerekli dili ve coğrafi ortamı daha rahat bir şekilde elde edebilirsiniz.

    JDK10'da eklenen bir yöntem gibi,

    java.time.format.DateTimeFormatter :: localizedBy

    Bu yöntem sayesinde, zaman bilgisinin gerektirdiği dil ve yerel ortam bilgisini elde etmek için belirli bir dijital stil, bölgesel tanım veya zaman dilimi kullanılabilir.

    Ek: Bağlantıdan, JDK10'un tüm yöntem seviyesi değişikliklerini görebilirsiniz.

    5. Geçerli JDK yönetimi kök sertifikasını görüntüleyin.

    JDK9'dan beri, geçerli JDK tarafından yönetilen kök sertifikaları görüntülemek için anahtar aracına -cacerts parametresi eklenmiştir. OpenJDK9'da cacerts boştur ve bu da geliştiricilere çok fazla değişmezlik getirecektir.

    EP318, Oracle JavaSE'deki cacerts bilgilerini kaynak olarak açmak için Oracle'ı kullanır ve OpenJDK'da bir dizi varsayılan kök sertifika yetki sertifikası sağlar. Şu anda 80 kayıt bulunmaktadır.

    / jdk-10 / bin $ ./keytool -list -cacerts Anahtar deposu şifresini girin: Anahtar deposu türü: JKS Anahtar deposu sağlayıcısı: SUN Anahtar deponuz 80 giriş içeriyor verisignclass2g2ca, 2 Aralık 2017, TrustedCertEntry, Sertifika parmak izi (SHA-256): 3A: 43: E2: 20: FE: 7F: 3E: A9: 65: 3D: 1E: 21: 74: 2E: AC: 2B: 75: C2: 0F: D8: 98: 03: 05: BC: 50: 2C: AF: 8C: 2D: 9B: 41: A1 ......

    Sonraki sürüm için Outlook

    Bir sonraki ana Java sürümü, Java 8'den sonraki bir LTS sürümü olan Java 11 olacak. Bu yılın Eylül ayında piyasaya sürülmesi bekleniyor. Şu anda yalnızca dört JEP vardır ve daha fazla geliştirme önerisi kademeli olarak eklenecektir.

    Bu sürüm modülerlik yeteneğini tam anlamıyla oynayacak, JavaEE ve Corba ile ilgili mevcut JDK'nın parçalarını kaldıracak ve daha kompakt hale gelecektir.

    JDK9'un en önemli özelliği modülerlik olmasına rağmen, Java endüstrisi geniş çapta kabul görmekte ve bir süreç gerektirecek şekilde uyarlanmaktadır. Log4j2 gibi modülerleştirmeyi destekleyen bazı kitaplıklar vardır, ancak bunların çoğu henüz desteklenmemektedir.

    JDK11'in piyasaya sürülmesinden sonra modülerlik özelliğinin uzun vadeli bir destek özelliği haline geleceği ve giderek daha fazla kütüphanenin modülerleştirme için destek sağlayacağı öngörülebilir.

    Java, uygulama geliştirme için en uygun dil ve platform olmaya devam edecek Büyük topluluk ve çok çeşitli geliştiriciler, Java'nın sürekli iyileştirilmesini ve optimizasyonunu teşvik etmeye ve çeşitli programlama alanlarında geliştirmeye devam edecek.

    Makalenin orijinal yazarından alıntı yaptığınız için teşekkür ederiz! Alıntı yapılan resimler, veriler ve yöntemler orijinal yazara aittir. Bir sonraki ana Java sürümü, Java 8'den sonraki bir LTS sürümü olan Java 11 olacak. Bu yılın Eylül ayında piyasaya sürülmesi bekleniyor. Şu anda yalnızca dört JEP vardır ve daha fazla geliştirme önerisi kademeli olarak eklenecektir. Bu sürüm modülerlik yeteneğini tam anlamıyla oynayacak, JavaEE ve Corba ile ilgili mevcut JDK'nın parçalarını kaldıracak ve daha kompakt hale gelecektir. JDK9'un en önemli özelliği modülerlik olmasına rağmen, Java endüstrisi geniş çapta kabul görmekte ve bir süreç gerektirecek şekilde uyarlanmaktadır. Log4j2 gibi modülerleştirmeyi destekleyen bazı kitaplıklar vardır, ancak bunların çoğu henüz desteklenmemektedir. JDK11'in piyasaya sürülmesinden sonra modülerlik özelliğinin uzun vadeli bir destek özelliği haline geleceği ve giderek daha fazla kütüphanenin modülerleştirme için destek sağlayacağı öngörülebilir. Java, uygulama geliştirme için en uygun dil ve platform olmaya devam edecek Büyük topluluk ve çok çeşitli geliştiriciler, Java'nın sürekli iyileştirilmesini ve optimizasyonunu teşvik etmeye ve çeşitli programlama alanlarında geliştirmeye devam edecek. Makalenin orijinal yazarından alıntı yaptığınız için teşekkür ederiz! Alıntı yapılan resimler, veriler ve yöntemler orijinal yazara aittir.

    : https://simonis.github.io/cl4cds/

    : https://marschall.github.io/2018/02/18/wildfly-appcds.html

    : https://gunnarmorling.github.io/jdk-api-diff/jdk9-jdk10-api-diff.html#java.time.format.DateTimeFormatter

    yazar hakkında

    Zhang Jianfeng, Yongyuan Middleware'in kurucu ortağı, Red Hat JBoss Uygulama Sunucusu Çekirdek Geliştirme Grubu'nun eski üyesi. Pekin Posta ve Telekomünikasyon Üniversitesi ve Tsinghua Üniversitesi'nden mezun oldu, Kingsoft, IONA Technology Corporation ve Red Hat Software için çalıştı.

    JavaEE'nin çeşitli spesifikasyonlarına aşina olan açık kaynak teknolojisi meraklıları, çeşitli açık kaynak projeleri ile iletişime geçmeyi, iyi noktaları öğrenmeyi ve onlardan öğrenmeyi severler, iyi bir kaynak kodu okumanın iyi bir kitap okumak kadar keyifli olduğunu düşünürler; Bilgi işlem, kurumsal uygulama tasarımı, mobil endüstri uygulamaları, DevOps ve diğer teknik alanlar zengin pratik deneyime ve kendi içgörülerine sahiptir; yazılımın arkasındaki yönetim fikirleri hakkında düşünmeye istekli, yazılım teknolojisinin verimli yönetime ulaşmanın bir yolu olduğuna inanır ve öğrenme yönetimiyle ilgilenirim Yazılım geliştirme ile entegre edin.

    20-22 Nisan tarihleri arasında, QCon Beijing 2018, Beijing Uluslararası Kongre Merkezi'nde yapılacak. Bu sefer, Java alanında Oracle'ın Java'dan sorumlu VP'si Georges Saab ve "Java Programming Thoughts" (Java Programming Thoughts) yazarı Bruce Eckel gibi birkaç temsilciyi de davet etti. Sanırım birçok kişi onun kitabını Java öğrenmek için okudu) ve Oracle Labs'de kıdemli bir araştırmacı olan Zheng Yudi de GraalVM ve ekosistemini paylaşmaya gelecek.

    Tıklamak "Orijinali okuyun" veya QR kodunu tanımlayın Teknik uzmanların uygulamaları ve düşünceleri hakkında daha fazla bilgi edinin. Şu anda, kayıt için% 10 indirim 680 yuan olacaktır. Herhangi bir sorunuz varsa, lütfen bilet yöneticisi Hanna'ya danışın, Tel: 010-84782011, WeChat: qcon-0410.

    Bugünün Tavsiyesi

    Okumak için aşağıdaki resme tıklayın

    Makine öğrenimi için gerekli matematiksel temeller nelerdir?

    190326 Wang Yuan "Dünya ve Sonsuza Kadar" Roadshow Wang Yuan anında minnettarlığını ifade etti
    önceki
    Famitong puanı: "The Last Guardian" için 38 puan
    Sonraki
    Douban, 8,4 puan aldı, ancak para kavramındaki kafa karışıklığı nedeniyle insan ortamlarının çöküşü alay edildi
    "TFBOYS" "Haberler" 190326 Wang Yuan'ın "Dünya ve Sonsuza Kadar" tanıtım gezisi, Wang Yuan minnettarlığını ifade etti
    Dyson Airwrap neden kızları "çığlık attırıyor"? Tecrübeden sonra derler
    Arkadaş canlısı bazuka mı? "Monster Hunter XX" Alchemy Style Detayları
    Wu Qilong Bao güveç restoranı, Liu Shishinin doğum gününü, mütevazı sevgiyi gösteren kalp şeklinde bir havai fişekle kutluyor
    Çıplak metal fiyatı 29.900 yuan ve Fuji GFX 50R aynasız orta format Kasım ayında satışa sunulacak
    Yurtiçi sorunları çözmek için yabancı tekerlekleri kullanan bu teknik uzmanlar yakında Pekin'de uçacaklar.
    Bieber'in psikoterapi gördüğünden şüpheleniliyor, ancak Selena hala kalbinde mi?
    "EXO" "Paylaş" 190326 Çıkan gözyaşları da aynen öyle oldu, onlar tarafından boğuldu.
    Zhao Liying'in üç kişilik ailesi ilk kez aynı karedeydi, o yavaşça yürüdü, Feng Shaofeng ellerini kavuşturdu ve medyaya teşekkür etti
    Satın al ya da alma? Efsane "Liulong 6 Şiirler Kaderin" son bölümü.
    190326 Kim genç değildi? O Yıllardaki İkinci Ustanın Saç Modeli Envanteri
    To Top