Oracle, 18 Mart 2014'te Java'nın yeni bir sürümünü Java 8 olarak yayınladı. Bu, yazılım geliştirme platformu için Java'nın devrim niteliğindeki bir sürümüydü. Java programlama, JVM, Araçlar ve kitaplıklarda çeşitli yükseltmeler içerir.
Java 8 Programlama Dili Geliştirmeleri
Java 8, Java Programlama için aşağıdaki özellikleri sağlar:
- Lambda ifadeleri,
- Yöntem referansları,
- Fonksiyonel arayüzler,
- Akış API'si,
- Varsayılan yöntemler,
- Base64 Kodlama Kod Çözme,
- Arayüzdeki statik yöntemler,
- İsteğe bağlı sınıf,
- Koleksiyoncular sınıfı,
- ForEach() yöntemi,
- Gergedan JavaScript Motoru,
- Paralel Dizi Sıralama,
- Açıklamaların Yazılması ve Tekrarlanması,
- GÇ Geliştirmeleri,
- Eşzamanlılık Geliştirmeleri,
- JDBC Geliştirmeleri vb.
Lambda İfadeleri
Lambda ifadesi, kodumuzu işlevsel tarzda yazmamıza yardımcı olur. Bir ifade kullanarak SAM arayüzünü (Tek Soyut Yöntem) uygulamanın açık ve kısa bir yolunu sağlar. Verilerin yinelenmesine, filtrelenmesine ve çıkarılmasına yardımcı olduğu koleksiyon kitaplığında çok kullanışlıdır.
Daha fazla bilgi ve örnek için: buraya tıklayın
Yöntem Referansları
Java 8 Yöntem referansı, işlevsel arayüzün yöntemini belirtmek için kullanılır. Lambda ifadesinin kompakt ve kolay şeklidir. Sadece bir yönteme atıfta bulunmak için lambda ifadesini her kullandığınızda, lambda ifadenizi yöntem referansıyla değiştirebilirsiniz.
Daha fazla bilgi ve örnek için: buraya tıklayın
Fonksiyonel Arayüz
Yalnızca bir soyut yöntem içeren bir Arayüz, işlevsel arayüz olarak bilinir. Herhangi bir sayıda varsayılan ve statik yönteme sahip olabilir. Ayrıca nesne sınıfının yöntemlerini de bildirebilir.
İşlevsel arayüzler aynı zamanda Tek Soyut Yöntem Arayüzleri (SAM Arayüzleri) olarak da bilinir.
Daha fazla bilgi ve örnek için: buraya tıklayın
İsteğe bağlı
Java, Java 8'de yeni bir Optional sınıfını tanıttı. Bu, Java uygulamasında NullPointerException ile başa çıkmak için kullanılan genel bir son sınıftır. İthal etmeliyiz java.util Bu sınıfı kullanmak için paket. Belirli bir değişken için değerin varlığını kontrol etmek için yöntemler sağlar.
Daha fazla bilgi ve örnek için: buraya tıklayın
her biri için
Java, elemanları yinelemek için forEach() için yeni bir yöntem sağlar. Yinelenebilir ve Akış arayüzlerinde tanımlanır.
Yinelenebilir arayüzde tanımlanan varsayılan bir yöntemdir. Yinelenebilir arayüzü genişleten koleksiyon sınıfları, öğeleri yinelemek için forEach() yöntemini kullanabilir.
Bu yöntem, işlevsel bir arayüz olan tek bir parametre alır. Yani lambda ifadesini argüman olarak iletebilirsiniz.
Daha fazla bilgi ve örnek için: buraya tıklayın
Tarih/Saat API'si
Java, Java 8'den bu yana yeni bir Tarih ve Saat API'sini kullanıma sunmuştur. Java.time paketi, Java 8 Tarih ve Saat sınıflarını içerir.
Daha fazla bilgi ve örnek için: buraya tıklayın
Varsayılan Yöntemler
Java, arayüz içinde varsayılan yöntemler oluşturma olanağı sağlar. Arayüz içerisinde tanımlanan ve default anahtar kelimesiyle etiketlenen yöntemlere varsayılan yöntemler denir. Bu yöntemler soyut olmayan yöntemlerdir ve yöntem gövdesine sahip olabilirler.
Daha fazla bilgi ve örnekler için: buraya tıklayın
Rhino JavaScript Motoru
Nashorn bir JavaScript motorudur. JVM'de (Java Virtual Machine) JavaScript kodunu dinamik olarak çalıştırmak için kullanılır. Java bir komut satırı aracı sağlar vesaire JavaScript kodunu yürütmek için kullanılır.
JavaScript kodunu iki şekilde çalıştırabilirsiniz:
- Jjs komut satırı aracını kullanma ve
- Java kaynak koduna yerleştirerek.
Daha fazla bilgi ve örnekler için: buraya tıklayın
StringJoiner
Java, Java.util paketine yeni bir son sınıf StringJoiner ekledi. Sınırlayıcıyla ayrılmış bir karakter dizisi oluşturmak için kullanılır. Artık virgül(,), kısa çizgi(-) vb. gibi sınırlayıcıları ileterek dize oluşturabilirsiniz.
autocad'de 3 boyutlu
Daha fazla bilgi ve örnekler için: buraya tıklayın
Koleksiyonerler
Collectors, Object sınıfını genişleten son sınıftır. Öğelerin koleksiyonlarda biriktirilmesi, öğelerin çeşitli kriterlere göre özetlenmesi vb. gibi indirgeme işlemleri sağlar.
Daha fazla bilgi ve örnek için: buraya tıklayın
Akış API'si
Java 8 java.util.stream paketi, öğeler üzerinde işlevsel tarzda işlemlere izin veren sınıflardan, arayüzlerden ve bir numaralandırmadan oluşur. Tembel hesaplama gerçekleştirir. Yani sadece ihtiyaç duyulduğunda çalıştırılır.
Daha fazla bilgi ve örnek için: buraya tıklayın
Akış Filtresi
Java akışı, akış öğelerini verilen yüklem temelinde filtrelemek için bir filter() yöntemi sağlar. Diyelim ki listenizin yalnızca çift elemanlarını almak istiyorsunuz, bunu filter() yönteminin yardımıyla kolayca yapabilirsiniz.
Bu yöntem, yüklemi bir argüman olarak alır ve sonuç öğelerinin bir akışını döndürür.
Daha fazla bilgi ve örnek için: buraya tıklayın
Java Base64 Kodlama ve Kod Çözme
Java, şifreleme ve şifre çözme işlemlerini gerçekleştirmek için Base64 sınıfını sağlar. Yöntemlerini kullanmak için Java.util.Base64 sınıfını kaynak dosyanıza aktarmanız gerekir.
Bu sınıf, her düzeyde bilgiyi şifrelemek için üç farklı kodlayıcı ve kod çözücü sağlar.
Daha fazla bilgi ve örnek için: buraya tıklayın
Java Paralel Dizi Sıralama
Java, Arrays sınıfında dizi öğelerini paralel olarak sıralamak için kullanılan yeni bir ek özellik sağlar. ParalelSort() yöntemi, dizilerin sıralanmasını sağlamak için JSR 166 Fork/Join paralellik ortak havuzunu kullanan java.util.Arrays sınıfına eklenmiştir. Aşırı yüklenmiş bir yöntemdir.
Daha fazla bilgi ve örnekler için: buraya tıklayın
Java 8 Güvenlik Geliştirmeleri
1) Java Secure Socket Extension (JSSE) sağlayıcısı, istemci tarafında varsayılan olarak Aktarım Katmanı Güvenliği (TLS) 1.1 ve TLS 1.2 protokollerini etkinleştirir.
2) Diğer izinleri kontrol etmek için yığının tam geçişini engellemeden, kodun kendi ayrıcalıklarının bir alt kümesini öne sürmesine olanak tanıyan geliştirilmiş bir AccessController.doPrivileged yöntemi eklenmiştir.
3) PBEWithSHA256AndAES_128 ve PBEWithSHA512AndAES_256 gibi Gelişmiş Şifreleme Standardı (AES) ve Parola Tabanlı Şifreleme (PBE) algoritmaları SunJCE sağlayıcısına eklenmiştir.
4) Java Secure Socket Extension (SunJSSE), JDK 7'de varsayılan olarak istemci uygulamaları için Sunucu Adı Göstergesi (SNI) uzantısını etkinleştirmiştir ve JDK 8, sunucu uygulamaları için SNI uzantısını destekler. SNI uzantısı, istemcinin el sıkışma sırasında hangi sunucu adına bağlanmaya çalıştığını belirtmek için SSL/TLS protokollerini genişleten bir özelliktir.
5) SunJSSE, İlişkili Verilerle Doğrulanmış Şifreleme (AEAD) algoritmalarını destekleyecek şekilde geliştirilmiştir. Java Şifreleme Uzantısı (SunJCE) sağlayıcısı, AES/GCM/NoPadding şifre uygulamasının yanı sıra Galois/Sayaç Modu (GCM) algoritma parametrelerini destekleyecek şekilde geliştirilmiştir.
youtube'dan vlc indir
6) Keytool yardımcı programına yeni bir komut bayrağı -importpassword eklendi. Bir şifreyi kabul etmek ve onu gizli anahtar olarak güvenli bir şekilde saklamak için kullanılır. DKS anahtar deposu türünü desteklemek için java.security.DomainLoadStoreParameter ve java.security.PKCS12Attribute gibi sınıflar eklenmiştir.
7) JDK 8'de, şifreleme algoritmaları, mesaj özeti uygulamalarının SHA-2 ailesinin SHA-224 varyantı ile geliştirilmiştir.
8) NSA Suite B Şifreleme için aşağıdakileri içeren gelişmiş destek:
- NSA Suite B şifreleme algoritmaları için OID kaydı
- 2048 bit DSA anahtar çifti oluşturma desteği ve SHA224withDSA ve SHA256withDSA gibi 2048 bit DSA anahtarları için ek imza algoritmaları.
- Diffie-Hellman (DH) algoritması için anahtar boyutu kısıtlamasının 1024'ten 2048'e kaldırılması.
9) SecureRandom sınıfı, özel veya genel anahtarlar, şifreler ve imzalı mesajlar için kullanılan kriptografik olarak güçlü rastgele sayıların oluşturulmasını sağlar. En güçlü SecureRandom örneğini döndüren getInstanceStrong() yöntemi JDK 8'de tanıtıldı. RSA özel ve genel anahtarı oluşturmanız gerektiğinde kullanılmalıdır. SecureRandom aşağıdaki diğer değişiklikleri içerir:
- UNIX platformları için engelleme ve engellememe davranışı sağlayan iki yeni uygulama tanıtıldı.
10) PKIX algoritması ile sertifikaların iptal durumunu kontrol eden yeni bir PKIXRevocationChecker sınıfı eklenmiştir. En iyi çaba denetimini, son varlık sertifika denetimini ve mekanizmaya özgü seçenekleri destekler.
11) Genel Anahtar Şifreleme Standartları 11 (PKCS), Windows için 64 bit destekleri içerecek şekilde genişletildi.
12) Kerberos 5'e iki yeni rcache türü eklendi. none yazın, hiç rcache yok, dfl yazın ise DFL stili dosya tabanlı rcache anlamına gelir. Ayrıca, kabul edenin talep ettiği alt anahtar artık desteklenmektedir. sun.security.krb5.rcache ve sun.security.krb5.acceptor.subkey sistem özellikleri kullanılarak yapılandırılırlar.
13) JDK 8'de Kerberos 5 protokol geçişi ve kısıtlı yetkilendirme aynı alanda desteklenir.
14) Java 8, varsayılan olarak zayıf şifrelemeyi devre dışı bırakmıştır. DES ile ilgili Kerberos 5 şifreleme türleri varsayılan olarak desteklenmez. Bu şifreleme türleri krb5.conf dosyasına izin_weak_crypto=true eklenerek etkinleştirilebilir.
15) Bağlantısız bir sunucuyu belirtmek için sunucu adını null olarak ayarlayabilirsiniz. Bu, bir istemcinin herhangi bir sunucu adını kullanarak hizmet talebinde bulunabileceği anlamına gelir. Bağlam oluşturulduktan sonra sunucu, adı SASL.BOUND_SERVER_NAME anahtar adıyla anlaşılan bir özellik olarak alabilir.
16) Yerel Java Genel Güvenlik Hizmeti'ne (JGSS) Java Yerel Arayüzü (JNI) köprüsü artık Mac OS X'te desteklenmektedir. Etkinleştirmek için sun.security.jgss.native sistem özelliğini true olarak ayarlayabilirsiniz.
17) Yeni bir sistem özelliği olan jdk.tls.ephemeralDHKeySize, geçici DH anahtarı boyutlarını özelleştirmek için tanımlanır. Kabul edilebilir minimum DH anahtarı boyutu, dışa aktarılabilir şifre paketleri veya eski mod (jdk.tls.ephemeralDHKeySize=legacy) haricinde 1024 bittir.
18) Java Güvenli Soket Uzantısı (JSSE) sağlayıcısı, varsayılan olarak müşterinin şifre paketi tercihini dikkate alır. Ancak davranış, sunucu üzerinden SSLParameters.setUseCipherSuitesOrder(true) çağrılarak sunucunun şifre paketi tercihine uyacak şekilde değiştirilebilir.
Java 8 Araç Geliştirmeleri
1) Nashorn motorunu etkileşimli kabuk modunda çağıran veya komut dosyalarını yorumlamak için bir jjs komutu tanıtıldı.
2) Java komutu, JavaFX uygulamasının doğru şekilde paketlenmesi koşuluyla JavaFX uygulamalarını başlatabilir.
3) Java komut kılavuz sayfası (hem nroff hem de HTML) tamamen yeniden düzenlendi. Gelişmiş seçenekler artık etkiledikleri alana göre Çalışma Zamanı, Derleyici, Çöp Toplama ve Servis Verilebilirlik olarak bölünmüştür. Daha önce eksik olan birkaç seçenek şimdi açıklanmaktadır. Ayrıca önceki sürümden bu yana kullanımdan kaldırılan veya kaldırılan seçenekler için bir bölüm de bulunmaktadır.
4) Yeni jdeps komut satırı aracı, geliştiricinin paket düzeyinde veya sınıf düzeyinde bağımlılıkları belirlemek için sınıf dosyalarını analiz etmesine olanak tanır.
5) Daha önce jcmd aracı aracılığıyla yalnızca yerel olarak erişilebilen teşhis komutlarına uzaktan erişebilirsiniz. Uzaktan erişim, Java Yönetim Uzantıları (JMX) kullanılarak sağlanır, böylece tanılama komutları, platform MBean sunucusuna kayıtlı bir platform MBean'e sunulur. MBean, com.sun.management.DiagnosticCommandMBean arayüzüdür.
6) Jarsigner aracına, Zaman Damgası Yetkilisinden imzalı bir zaman damgası talep etmenizi ve bunu imzalı bir JAR dosyasına eklemenizi sağlayan yeni bir -tsapolicyid seçeneği eklenmiştir.
7) Herhangi bir yöntemin veya yapıcının resmi parametrelerinin adlarına erişmenizi sağlayan yeni bir Java.lang.reflect.Executable.getParameters yöntemi eklenmiştir. Ancak .class dosyaları varsayılan olarak resmi parametre adlarını saklamaz. Resmi parametre adlarını belirli bir .class dosyasında depolamak ve böylece Reflection API'nin resmi parametre adlarını almasını sağlamak için, kaynak dosyayı javac derleyicisinin -parameters seçeneğiyle derleyin.
8) Java Dil Belirtimi (JLS) Bölüm 15.21'deki ikili karşılaştırmalara ilişkin tür kuralları artık javac tarafından doğru şekilde uygulanacaktır.
9) Bu sürümde, com.sun.mirror paketinde bulunan apt aracı ve bununla ilgili API kaldırılmıştır.
Javadoc Geliştirmeleri
Java SE 8'de Javadoc aracına aşağıdaki yeni API'ler eklenmiştir.
- Yeni DocTree API, soyut bir sözdizimi ağacıyla temsil edilen kaynak kodunda geçiş yapmanızı sağlayan bir tarayıcı sunar. Bu, Javadoc yorumlarının içeriğine yapısal erişim sağlayacak şekilde Derleyici Ağacı API'sini genişletir.
- javax.tools paketi, Javadoc aracını yeni bir işlem yürütmeden doğrudan bir Java uygulamasından çağırmanıza olanak tanıyan sınıflar ve arayüzler içerir.
- Bir sınıf veya arayüze ait oluşturulan dokümantasyonun 'Yöntem Özeti' bölümü yeniden yapılandırıldı. Bu bölümdeki yöntem açıklamaları türe göre gruplandırılmıştır. Varsayılan olarak tüm yöntemler listelenir. Belirli bir türdeki yöntemleri (statik, örnek, soyut, somut veya sınıfta veya arayüzde varsa kullanımdan kaldırılmış) görüntülemek için bir sekmeye tıklayabilirsiniz.
- Javadoc aracı artık, javadoc tarafından oluşturulan dosyalarda geçersiz HTML veya erişilebilirlik sorunları gibi çeşitli sorunlara yol açabilecek sorunlar için javadoc yorumlarının içeriğini kontrol etme desteğine sahiptir. Bu özellik varsayılan olarak etkindir ve yeni -Xdoclint seçeneğiyle de kontrol edilebilir.
Pack200 Geliştirmeleri
Java sınıfı dosya formatı, Java Platformunda Dinamik Olarak Yazılan Dilleri Destekleyen JSR 292 nedeniyle güncellendi.
Pack200 motoru, Java SE 8 sınıfı dosyaların etkili bir şekilde sıkıştırılmasını sağlayacak şekilde güncellendi. Artık sabit havuz girişlerini ve JSR 292 tarafından sunulan yeni bayt kodlarını tanıyabilir. Sonuç olarak, pack200 aracının bu sürümüyle oluşturulan sıkıştırılmış dosyalar, unpack200 aracının eski sürümleriyle uyumlu olmayacaktır.
Java 8 G/Ç Geliştirmeleri
Java 8'de, java.nio.charset.Charset ve genişletilmiş karakter kümesi uygulamalarında çeşitli iyileştirmeler vardır. Aşağıdakileri içerir:
- Sunucunun performansını veya ölçeklenebilirliğini artırabilecek Yeni bir SelectorProvider. /dev/poll SelectorProvider varsayılan olmaya devam ediyor. Solaris olay bağlantı noktası mekanizmasını kullanmak için, java.nio.channels.spi.Selector sistem özelliğini sun.nio.ch.EventPortSelectorProvider değerine ayarlayarak çalıştırın.
- /jre/lib/charsets.jar dosyasının boyutu azaltıldı.
- Java.lang.String(byte[], ∗) yapıcısı ve java.lang.String.getBytes() yöntemi için performans iyileştirildi.
Java 8 Ağ Geliştirmeleri
1) Yeni bir java.net.URLPermission sınıfı eklendi. Belirli bir URL tarafından tanımlanan bir kaynağa erişim iznini temsil eder.
2) Platforma özel soket seçeneklerini ve bu seçeneklerin tüm standart soket türlerinde ayarlanmasını sağlayan bir mekanizmayı içeren bir jdk.net paketi eklenmiştir. Soket seçenekleri jdk.net.ExtishedSocketOptions'ta tanımlanmıştır.
3) HttpURLConnection sınıfında, bir güvenlik yöneticisi kuruluysa ve bağlantı açma girişimiyle sonuçlanan bir yöntem çağrılırsa, arayan kişinin, hedef URL'nin ana bilgisayar/bağlantı noktası birleşimine yönelik bir 'connect'SocketPermission'a sahip olması veya bu isteğe izin veren bir URLPermission.
Otomatik yeniden yönlendirme etkinse ve bu istek başka bir hedefe yönlendirilirse, arayanın ayrıca yönlendirilen ana makineye/URL'ye bağlanma izninin olması gerekir.
Java 8 Eşzamanlılık Geliştirmeleri
Java.util.concurrent paketi iki yeni arayüz ve dört yeni sınıf ekledi.
Java.util.concurrent Arayüzler
Arayüz | Tanım |
---|---|
genel statik arayüz CompletableFuture.AsynchronousCompletionTask | Asenkron yöntemlerle üretilen asenkron görevleri tanımlamak için kullanılan bir işaretleyici arayüzdür. Eşzamansız etkinliklerin izlenmesi, hata ayıklaması ve izlenmesi için yararlı olabilir. |
genel arayüz CompletionStage | Başka bir CompletionStage tamamlandığında bir eylemi gerçekleştiren veya bir değeri hesaplayan, muhtemelen eşzamansız bir hesaplamanın bir aşamasını oluşturur. |
Java.util.concurrent Sınıfları
Sınıf | Tanım |
---|---|
genel sınıf CompletableFuture, Object'i genişletir ve Future, CompletionStage'i uygular | Açıkça tamamlanabilen bir Gelecektir ve tamamlandığında tetiklenen bağımlı işlevleri ve eylemleri destekleyen bir Tamamlama Aşaması olarak kullanılabilir. |
genel statik sınıf ConcurrentHashMap.KeySetView, Nesnenin Set, Seri hale getirilebilir uygulamalarını genişletir | Bu, ConcurrentHashMap'in bir anahtar kümesi olarak görünümüdür; burada eklemeler isteğe bağlı olarak ortak bir değere eşlenerek etkinleştirilebilir. |
genel soyut sınıf CountedCompleter, ForkJoinTask'ı genişletiyor | Tetiklendiğinde tamamlama eylemi gerçekleştirilen ve kalan bekleyen eylem bulunmayan bir ForkJoinTask. |
genel sınıf CompletionException RuntimeException'ı genişletiyor | Bir sonucun veya görevin tamamlanması sırasında bir hata veya başka bir istisnayla karşılaşıldığında bir istisna atar. |
Java.util.concurrent.ConcurrentHashMap sınıfındaki Yeni Yöntemler
ConcurrentHashMap sınıfı en son sürümünde birkaç yeni yöntem sunuyor. Çeşitli forEach yöntemlerini (forEach, forEachKey, forEachValue ve forEachEntry), arama yöntemlerini (search, searchKeys, searchValues ve searchEntries) ve çok sayıda azaltma yöntemini (reduce, reduceToDouble, reducToLong vb.) içerir. Diğer çeşitli yöntemler (mappingCount ve newKeySet) de eklenmiştir.
Java.util.concurrent.atomic'teki yeni sınıflar
En son sürüm, DoubleAccumulator, DoubleAdder, LongAccumulator ve LongAdder'dan oluşan küçük bir dizi yeni sınıf aracılığıyla ölçeklenebilir, güncellenebilir ve değişken destek sunar. Atomik değişkenlerle karşılaştırıldığında çok büyük verim iyileştirmeleri sağlayan çekişme azaltma tekniklerini dahili olarak kullanır.
Sınıf | Tanım |
---|---|
genel sınıf DoubleAccumulator Sayıyı genişletir Seri hale getirilebilir uygular | Sağlanan bir işlev kullanılarak güncellenen çalışan bir double değerini birlikte koruyan bir veya daha fazla değişken için kullanılır. |
genel sınıf DoubleAdder Sayıyı genişletir Serileştirilebilir'i uygular | Birlikte başlangıçta sıfır çift toplamı koruyan bir veya daha fazla değişken için kullanılır. |
genel sınıf LongAccumulator Sayıyı genişletir Serileştirilebilir uygular | Sağlanan bir işlev kullanılarak güncellenen, çalışan bir uzun değeri birlikte koruyan bir veya daha fazla değişken için kullanılır. |
genel sınıf LongAdder, Number'ı genişleterek Seri hale getirilebilirliği uygular | Birlikte başlangıçta sıfır uzun toplamı koruyan bir veya daha fazla değişken için kullanılır. |
Java.util.concurrent.ForkJoinPool Sınıfındaki yeni yöntemler
Bu sınıf, sırasıyla ortak havuzun veya ortak havuz örneğinin hedeflenen paralellik düzeyini döndüren iki yeni getCommonPoolParallelism() ve commonPool() yöntemini ekledi.
Yöntem | Tanım |
---|---|
genel statik ForkJoinPool commonPool() | Ortak havuz örneğini döndürür. |
Genel statik int getCommonPoolParallelism() | Ortak havuzun hedeflenen paralellik düzeyini döndürür. |
Yeni sınıf java.util.concurrent.locks.StampedLock
Okuma/yazma erişimini kontrol etmek için üç mod (yazma, okuma ve iyimser okuma) ile yetenek tabanlı kilit eklemek için kullanılan yeni bir StampedLock sınıfı eklendi. Bu sınıf aynı zamanda üç mod arasında koşullu olarak dönüşüm sağlayan yöntemleri de destekler.
Sınıf | Tanım |
---|---|
genel sınıf StampedLock, Nesnenin Serileştirilebilir uygulamasını genişletir | Bu sınıf, okuma/yazma erişimini kontrol etmek için üç modlu, yetenek tabanlı bir kilidi temsil eder. |
XML İşleme için Java API (JAXP) 1.6 Geliştirmeleri
Java 8'de, XML İşleme (JAXP) 1.6 için Java API eklenmiştir. Servis yapılandırma dosyalarından servis yüklemek için java.util.ServiceLoader tarafından tanımlanan servis sağlayıcı yükleyici özelliğinin kullanılmasını gerektirir.
Bunun mantığı, hizmet sağlayıcıların JAR dosyaları dışındaki araçlarla ve belki de hizmet yapılandırma dosyaları olmadan konuşlandırılabileceği Java SE platformunun gelecekte modülerleştirilmesine izin vermektir.
Java Sanal Makine Geliştirmeleri
Invokespecial talimatlarının doğrulanması, yalnızca geçerli sınıftaki veya onun doğrudan süper sınıfındaki bir örnek başlatma yönteminin çağrılabileceği şekilde sıkılaştırıldı.
Java Mission Control 5.3, Java 8'e dahildir
Java Görev Kontrolü (JMC), verimli ve ayrıntılı veri analizine olanak tanıyan ve gelişmiş, göze çarpmayan Java izleme ve yönetimi sağlayan gelişmiş bir araç setidir. JMC, kod performansı, bellek ve gecikme gibi ortak analiz alanlarına yönelik bölümler sağlar.
Japonca ve Basitleştirilmiş Çince'deki Babel Dil Paketleri artık varsayılan olarak JDK 8'de bulunan Java Mission Control'e dahil edilmiştir.
Java 8 Uluslararasılaştırma Geliştirmeleri
1) Unicode Geliştirmeleri
JDK 8, Unicode 6.2.0 desteğini içerir. Aşağıdaki özellikleri içerir.
- Türk Lirası işareti dahil 733 yeni karakter.
- 7 yeni komut dosyası:
- Meroitik Hiyeroglifler
- Meroitik El Yazısı
- Sora Sompeng
- Çakma
- Şarada
- Takri
- Miao
- 11 yeni blok: yukarıda listelenen yeni komut dosyaları için 7 blok ve aşağıdaki mevcut komut dosyaları için 4 blok dahil:
- Arapça Genişletilmiş-A
- Sundan Eki
- Toplantı Meek Uzantıları
- Arapça Matematiksel Alfabetik Semboller
Unicode CLDR Verilerinin ve java.locale.providers Sistem Özelliğinin Kabulü
Unicode Konsorsiyumu, 'mevcut yerel ayar verilerinin en büyük ve en kapsamlı standart deposuyla dünya dillerini desteklemek' için Ortak Yerel Ayar Veri Havuzu (CLDR) projesini yayınladı. CLDR, yerel veriler için fiili standart haline geliyor. CLDR'nin XML tabanlı yerel ayar verileri JDK 8 sürümüne dahil edilmiştir ancak varsayılan olarak devre dışıdır.
Yerel ayar verileri için dört farklı kaynak vardır:
- CLDR, Unicode CLDR projesi tarafından sağlanan yerel ayar verilerini temsil eder.
- HOST, geçerli kullanıcının temel işletim sistemi ayarlarını özelleştirmesini temsil eder. Yalnızca kullanıcının varsayılan yerel ayarıyla çalışır ve özelleştirilebilir ayarlar işletim sistemine bağlı olarak değişebilir ancak öncelikle Tarih, Saat, Sayı ve Para Birimi biçimleri desteklenir.
- SPI, kurulu SPI sağlayıcılarında uygulanan yerel ayarlara duyarlı hizmetleri temsil eder.
- JRE, önceki JRE sürümleriyle uyumlu yerel ayar verilerini temsil eder.
İstenilen yerel veri kaynağını seçmek için java.locale.providers sistem özelliğini kullanın. Veri kaynaklarının tercih edilen sıraya göre listelenmesi. Örneğin: java.locale.providers=HOST,SPI,CLDR,JRE Varsayılan davranış aşağıdaki ayara eşdeğerdir: java.locale.providers=JRE,SPI
Java 8 Yeni Takvim ve Yerel Ayar API'leri
JDK 8, iki yeni sınıf, birkaç yeni yöntem ve mevcut bir statik yöntem için yeni bir dönüş değeri içerir.
Java.util.spi paketine servis sağlayıcılar için iki yeni soyut sınıf eklendi.
Sınıf | Tanım |
---|---|
genel soyut sınıf CalendarDataProvider, LocaleServiceProvider'ı genişletiyor | Yerel ayara bağlı Takvim parametreleri sağlayan servis sağlayıcılara yönelik soyut bir sınıftır. |
genel soyut sınıf CalendarNameProvider, LocaleServiceProvider'ı genişletiyor | Takvim alanı değerlerinin yerelleştirilmiş dize temsillerini (görünen adlar) sağlayan hizmet sağlayıcılara yönelik soyut bir sınıftır. |
Statik bir yöntem artık numaralandırma sistemi için Locale.UNICODE_LOCALE_EXTENSION'ı tanıyabilmektedir.
Yöntem | Tanım |
---|---|
public static final DecimalFormatSymbols getInstance(Yerel ayar) | Belirtilen yerel ayar için DecimalFormatSymbols örneğini almak için kullanılır. Bu yöntem, Java çalışma zamanının kendisi tarafından desteklenen yerel ayarların yanı sıra yüklü DecimalFormatSymbolsProvider uygulamaları tarafından desteklenen yerel ayarlar için DecimalFormatSymbols örneklerine erişim sağlar. Yerel ayar null ise NullPointerException oluşturur. |
Takvim API'sine yeni yöntemler eklendi:
Yöntem | Tanım |
---|---|
genel boolean isSupportedLocale(Yerel ayar yerel ayarı) | Verilen yerel ayar bu yerel ayar servis sağlayıcısı tarafından destekleniyorsa true değerini döndürür. Verilen yerel ayar, desteğin belirlenmesinde dikkate alınması gereken uzantılar içerebilir. Java.util.spi.LocaleServiceProvider sınıfında tanımlanmıştır. |
public String getCalendarType() | Bu Takvimin takvim türünü döndürür. Takvim türleri, Unicode Yerel Ayar Veri İşaretleme Dili (LDML) belirtimine göre tanımlanır. Java.util.Calendar sınıfında tanımlanmıştır. |
Takvim adının biçimini belirlemek için Calendar.getDisplayName ve Calendar.getDisplayNames yöntemlerine yeni stil belirticileri eklendi.
Belirleyici | Tanım |
---|---|
genel statik final int SHORT_FORMAT | getDisplayName ve getDisplayNames için biçim için kullanılan kısa adı belirten bir stil belirticidir. |
genel statik final int LONG_FORMAT | getDisplayName ve getDisplayNames için biçim için kullanılan uzun bir adı belirten bir stil belirticidir. |
genel statik final int SHORT_STANDALONE | Bu, getDisplayName ve getDisplayNames için takvim başlıkları gibi ay kısaltması gibi bağımsız olarak kullanılan kısa bir adı belirten bir stil belirticisidir. |
genel statik final int LONG_STANDALONE | Bu, getDisplayName ve getDisplayNames için takvim başlıkları gibi ay adı gibi bağımsız olarak kullanılan uzun bir adı belirten bir stil belirticisidir. |
Bir yerel ayarın (isteğe bağlı) uzantılarıyla ilgilenmek için iki yeni Yerel Ayar yöntemi.
Yöntem | Tanım |
---|---|
genel boolean hasExtensions() | Bu Yerel Ayarın herhangi bir uzantısı varsa true değerini döndürür. |
genel Yerel ayar stripExtensions() | Bu Yerel Ayarın hiçbir uzantısı olmayan bir kopyasını döndürür. Bu Yerel Ayarın hiçbir uzantısı yoksa, bu Yerel Ayarın kendisi döndürülür. |
İki yeni Locale.filter yöntemi, RFC 4647'de tanımlandığı gibi, belirtilen ölçütlerle eşleşen Locale örneklerinin bir listesini döndürür:
Yöntem | Tanım |
---|---|
genel statik Liste filtresi (Liste öncelik listesi, Koleksiyon yerel ayarları) | RFC 4647'de tanımlanan filtreleme mekanizmasını kullanarak eşleşen Locale örneklerinin bir listesini döndürür. Mod Locale.FilteringMode.AUTOSELECT_FILTERING olduğunda bu, filter(List, Collection, FilteringMode) işlevine eşdeğerdir. |
genel statik Liste filtresi (Liste öncelik listesi, Koleksiyon yerel ayarları, Locale.FilteringMode modu) | RFC 4647'de tanımlanan filtreleme mekanizmasını kullanarak eşleşen Yerel Ayar örneklerinin bir listesini döndürür. |
İki yeni Locale.filterTags yöntemi, RFC 4647'de tanımlandığı gibi, belirtilen ölçütlerle eşleşen dil etiketlerinin bir listesini döndürür.
Yöntem | Tanım |
---|---|
genel statik Liste filterTags(Liste öncelikListesi, Koleksiyon etiketleri) | RFC 4647'de tanımlanan temel filtreleme mekanizmasını kullanarak eşleşen dil etiketlerinin bir listesini döndürür. Mod Locale.FilteringMode.AUTOSELECT_FILTERING olduğunda bu, filterTags(List, Collection, FilteringMode) işlevine eşdeğerdir. |
public static List filterTags(List PriorityList, Collection tags, Locale.FilteringMode mode) | RFC 4647'de tanımlanan temel filtreleme mekanizmasını kullanarak eşleşen dil etiketlerinin bir listesini döndürür. |
İki yeni arama yöntemi, RFC 4647'de tanımlanan arama mekanizmasını kullanarak en iyi eşleşen yerel ayarı veya dil etiketini döndürür.
Yöntem | Tanım |
---|---|
genel statik Yerel Ayar araması(Liste öncelik listesi, Koleksiyon yerel ayarları) | RFC 4647'de tanımlanan arama mekanizmasını kullanarak en iyi eşleşen dil etiketi için bir Locale örneği döndürür. |
Genel statik Dize aramaTag(Liste öncelikListesi,Koleksiyon etiketleri) | RFC 4647'de tanımlanan arama mekanizmasını kullanarak en iyi eşleşen dil etiketini döndürür. |
Diğer Java 8 Sürümü Geliştirmeleri
JDK 8u5'teki geliştirmeler
1) Bir uygulama için güvenlik istemlerinin gösterilme sıklığı azaltıldı.
JDK 8u11'deki geliştirmeler
1) JRE kurulduğunda veya güncellendiğinde sponsorlardan gelen teklifleri engelleme seçeneği Java Denetim Masasının Gelişmiş sekmesinde mevcuttur.
2) Giriş Noktası özelliği, bir veya daha fazla sınıfı RIA'nız (Zengin İnternet uygulaması) için geçerli bir giriş noktası olarak tanımlamak üzere JAR dosyası bildirimine dahil edilebilir.
JDK 8u20'deki geliştirmeler
1) Javafxpackager aracı, javapackager olarak yeniden adlandırıldı. Bu araç, bağımsız uygulama paketleyicilerine yönelik yeni argümanlarla geliştirilmiştir.
Aşağıdaki geliştirmeler Java aracıyla ilgilidir:
- Kısıtlı İşlemsel Bellek (RTM) ile ilgili deneysel bir JIT derleyici seçeneği eklendi.
- Dize tekilleştirmeyle ilgili çeşitli seçenekler eklendi.
- Gelişmiş Şifreleme Standardı (AES) içselleriyle ilgili çeşitli seçenekler eklenmiştir.
- Çöp toplama seçeneklerinin kombinasyonları kullanımdan kaldırıldı.
2) Java HotSpot Sanal Makinesine Çöp Toplama Ayarlama Kılavuzu eklendi. Java HotSpot VM'de bulunan çöp toplayıcıları açıklar ve özellikle büyük miktarda veri (birden fazla gigabayt) işliyorsa, çok sayıda iş parçacığına sahipse ve yüksek işlem oranlarına sahipse, hangi çöp toplayıcının uygulamanızın performansını en iyi şekilde optimize edebileceğine karar vermenize yardımcı olur. .
JDK 8u31'deki geliştirmeler
1) Bu sürümde SSLv3 protokolü, Java Denetim Masası Gelişmiş seçeneklerinden kaldırılmıştır.
JDK 8u40'taki geliştirmeler
Java aracı
1) Onaylanan standartları geçersiz kılma mekanizması (JDK-8065675) ve uzantı mekanizması (JDK-8065702) kullanımdan kaldırıldığı için -XX:+CheckEndorsedAndExtDirs eklendi. Bu seçenek, bu mekanizmaların mevcut kullanımlarının belirlenmesine yardımcı olur ve JDK 7u80 ve JDK 8u40'ta desteklenir.
2) Java Flight Recorder (JFR), ticari özelliklerin kilidini açmak ve bir uygulamanın çalışma zamanı sırasında JFR'yi etkinleştirmek için çeşitli yollar sunar.
Java Görev Kontrolü içindeki jcmd tanılama komutları ve Grafik Kullanıcı Arayüzü (GUI) kontrolleri gibi java komut satırı seçeneklerini içerir. Bu esneklik, başlangıçta uygun seçenekleri sunmanıza veya daha sonra JFR ile etkileşime girmenize olanak tanır.
3) -XX:StartFlightRecording=parameter=value seçeneği, JVM kontrollü bir şekilde sonlandığında JFR verilerinin bir döküm dosyasının oluşturulup oluşturulmayacağını belirten yeni bir parametreye sahiptir: dumponexit=true.
4) Kısıtlı İşlemsel Bellek (RTM) ile ilgili seçenekler artık deneysel değildir. Bu seçenekler arasında -XX:RTMAbortRatio=abort_ratio, -XX:RTMRetryCount=yeniden deneme sayısı, -XX:+UseRTMDeopt ve -XX:+UseRTMLocking bulunur.
5) Java 8'de Uygulama Sınıfı Veri Paylaşımı (AppCDS) tanıtıldı. AppCDS, standart uzantı dizinlerindeki sınıfların ve uygulama sınıfı yolunun paylaşılan arşive yerleştirilmesini sağlamak için CDS'yi (Sınıf Veri Paylaşımı) genişletir. Bu ticari bir özelliktir ve artık deneysel olarak kabul edilmemektedir.
java rastgele sayı üretir
6) Yeni seçenekler -XX:+ResourceManagement ve -XX:ResourceManagementSampleInterval=value eklendi.
7) Büyük sayfalarla ilgili ek bilgiler eklendi. Büyük sayfalar olarak da bilinen Büyük Sayfalar, standart bellek sayfası boyutundan önemli ölçüde daha büyük olan bellek sayfalarıdır. Büyük sayfalar işlemcinin Çeviri Görünümü Arabelleklerini optimize eder. -XX:+UseHugeTLBFS, -XX:+UseSHM ve -XX:+UseTransparentHugePages Linux seçenekleri belgelenmiştir.
8) -XX:ObjectAlignmentInBytes=alignment seçeneği belgelenmiştir.
JJS aracı
1) --optimistic-types=[true|false] seçeneği eklendi. Yeniden derlemeyi optimize etmeden iyimser tür varsayımlarını etkinleştirir veya devre dışı bırakır.
2) --language=[es5] seçeneği jjs aracına eklendi. ECMAScript dili sürümünü belirtir.
Javapackager aracı
1) OS X paketleyicileri için yeni argümanlar mevcut. mac.CFBundleVersion bağımsız değişkeni kullanılacak dahili sürüm numarasını tanımlar.
2) mac.dmg.simple argümanı, AppleScript kodunun yürütülmesine bağlı olan DMG özelleştirme adımlarının atlanıp atlanmadığını gösterir.
Jcmd aracı
Jcmd aracı, Java Flight Recorder (JFR) ile dinamik olarak etkileşimde bulunmak için kullanılır. Ticari özelliklerin kilidini açmak, uçuş kayıtlarını etkinleştirmek/başlatmak/durdurmak ve sistemden çeşitli durum mesajları almak için kullanabilirsiniz.
Jstat aracı
Jstat aracı, metaspace'in özel bir parçası olan sıkıştırılmış sınıf uzayına ilişkin bilgilerle güncellendi.
Sanal makine
Ölçeklenebilir Yerel Bellek İzleme HotSpot VM özelliği, VM bellek sızıntılarını teşhis etmeye ve bellek sızıntıları VM'de olmadığında kullanıcıları bilgilendirmeye yardımcı olur. Yerel Bellek İzleyici, büyük sistemlerde kendi kendine kapanmadan ve küçük programlar için kabul edilebilir kabul edilenin ötesinde önemli bir performans etkisine neden olmadan çalıştırılabilir.