logo

Java 8 Özellikleri

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:

  1. Jjs komut satırı aracını kullanma ve
  2. 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.