Java12 hakkında her şey – Yeni Özellikler, Güvenlik ve Anahtar İfade Beyanı (Örnekler)
Yayınlanan: 2019-04-07 19th March 2019
Java12 yayınlandı. Java12'nin hızlı sürümün bir parçası olduğunu bildiğimiz gibi, Java12
yayınlanmasından sadece 6 ay sonra yayınlandı.
Bu eğitimde Java12 ile ilgili tüm değişiklikleri ve yeni özellikleri gözden geçireceğiz.
Şahsen tüm geliştirmem için Java12'ye geçtim ama üretim döngüsü için çok erken. Tüm üretim projeleriniz için Java12'ye geçmek istediğinizde bu öğreticiyi işaretli tutun.
Java12'deki yenilikler neler? Java12'deki yeni özellikler:
Java12'de değişen, dahili ve kullanıcı iş akışıyla ilgili birkaç özellik vardır. Java 12'nin içinde neler olduğuna bir göz atalım.
Değişiklik-1) Eşzamanlı Sınıf boşaltma
Normal Çöp Toplayıcı genellikle GC döngüsü sırasında kullanılmayan değişkeni kaldırır ve genellikle süreçte bir miktar durma/duraklama veya bu süre zarfında CPU artışı fark ederiz. Genellikle bunu fark etmeyiz bile.
ZGC
(Z Garbage Collector) ile – Java12, eşzamanlı Sınıf boşaltmayı da destekler. Bu, normal GC döngüsü sırasında gerçekleştiğinden, herhangi bir duraklama olmaz ve fazladan bellek kullanımı da olmaz.
Varsayılan olarak ZGC, Java12'de etkinleştirilmiştir. Daha fazla işlem gerekmez
ZGC nasıl devre dışı bırakılır?
- Uygulamanızı JVM komut satırı argümanı
-XX:-ClassUnloading
ile başlatmanız yeterlidir.
Değişiklik-2) JVM Crash hakkında daha fazla ayrıntı alın
Bir OOM (Bellek Yetersiz) hatası olduğunda veya JVM çöktüğünde, genellikle Java tüm ayrıntıları içeren döküm dosyaları oluşturur.
1 |
- XX : HeapDumpPath =/ tmp / crunchify / - XX : + HeapDumpOnOutOfMemoryError |
Bu JVM parametreleri ile OOM hatasında /tmp/crunchify/
klasörü altında Dump dosyaları oluşturulacaktır.
Java12'ye eklenen bir seçenek daha var:
1 |
- XX : + ExtensiveErrorReports |
JVM çökmesi ile ilgili tüm ayrıntıları içeren hs_err<pid>.log
adlı yeni günlük dosyası oluşturulacak. Bu, sık sık çökme görüyorsanız ve daha fazla hata ayıklamak istiyorsanız, üretim ortamınız için çok yararlıdır.
Varsayılan olarak devre dışıdır, ancak JVM komut satırı parametresinin üstüne ekleyerek kapsamlı kilitlenme raporunu etkinleştirebilirsiniz.
Değişiklik-3) Kompakt Sayı Biçimlendirme
java.text, kompakt Sayı biçimi için destek ekler. 100o
, 1K
olarak ve 100000
, 100K
olarak bahsedilebilir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package crunchify . com . tutorials ; import java . text . NumberFormat ; import java . util . Locale ; /** * @author Crunchify.com * Java12 Compact Number format example * */ public class CrunchifyJava12CompactNumber { public static void main ( String args [ ] ) { // NumberFormat is the abstract base class for all number formats. // This class provides the interface for formatting and parsing numbers. NumberFormat also provides methods for determining which locales have number formats, and what their names are. NumberFormat crunchifyFormat = NumberFormat . getCompactNumberInstance ( Locale . US , NumberFormat . Style . SHORT ) ; // getCompactNumberInstance returns a compact number format for the specified locale and formatStyle. String crunchifyResult = crunchifyFormat . format ( 100000 ) ; System . out . println ( "NumberFormat.Style.SHORT Result: " + crunchifyResult ) ; } } |
Sonuç:
1 |
NumberFormat . Style . SHORT Result : 100K |
Değişiklik-4) Java Güvenlik Geliştirmeleri
security-libs/java.security
değişiklikleri:
- Java.security.manager için Seçeneklere izin verme ve izin verme
-
disallow
, Sistem.setSecurityManager
, güvenlik yöneticisini ayarlamak için kullanılamaz.
-
- -groupname Seçeneği Keytool Anahtar Çifti Oluşturma eklendi
- bir kullanıcı, bir anahtar çifti oluştururken adlandırılmış bir grup belirleyebilir.
-
PKCS12 keystore
Üretimini özelleştirme- için algoritmalar ve parametreler içerir.
- anahtar koruması
- sertifika koruması
- MacData
- için algoritmalar ve parametreler içerir.
- Yeni JFR Güvenlik Olayları
- JFR (Java Uçuş Kaydedici) Nedir?
- 4 yeni JFR etkinliği eklendi
- jdk.X509Sertifika
- jdk.X509Doğrulama
- jdk.TLSHandshake
- jdk.SecurityPropertyDeğiştirme
Değişiklik-5) JEP 325: İfadeleri Değiştir
Gelişmiş Switch statement
artık Java12'de desteklenmektedir.
- Java 12 tabanlı
case L -> syntax
işlemi. Burada herhangi bir mola gerekli değildir. - Anahtar İfadesinin Kullanımı
- bu basitleştirilmiş switch ifadesidir
- bir etiket eşleştirilirse, yalnızca ok etiketinin sağındaki ifade yürütülür.
- Break ifadesine gerek yok.
CrunchifyJava12SwitchExample.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
package crunchify . com . tutorials ; import java . util . Scanner ; /** * @author Crunchify.com * What's new in Java12 Switch statement? * */ public class CrunchifyJava12SwitchExample { public static void main ( String [ ] args ) { Scanner crunchifyObj = new Scanner ( System . in ) ; log ( "Enter company name from: Google, Facebook, PayPal, eBay, Twitter, LinkedIn, Apple" ) ; String company = crunchifyObj . nextLine ( ) ; log ( "Selected Company: " + company ) ; // Pre-Java12 Switch statement switch ( company ) { case "Google" : case "Facebook" : case "PayPal" : case "eBay" : case "Twitter" : log ( "Pre-Java12: This switch is for companies Google, Facebook, PayPal, eBay & Twitter" ) ; break ; case "" : case "Apple" : case "LinkedIn" : log ( "Pre-Java12: This switch is for companies Apple & LinkedIn" ) ; break ; default : log ( "Pre-Java12: Oops... Invalid company" ) ; } /** * Java 12 based case L -> syntax operation. * Here there isn't any break necessary. */ switch ( company ) { case "Google" , "Facebook" , "PayPal" , "eBay" , "Twitter" - > log ( "Java12: This switch is for companies Google, Facebook, PayPal, eBay & Twitter" ) ; case "Apple" , "LinkedIn" - > log ( "Java12: This switch is for companies Apple & LinkedIn" ) ; default - > { log ( "Java12: Oops... Invalid company" ) ; } } /** * This is switch expression */ final String companyName ; companyName = switch ( company ) { case "Google" , "Facebook" , "PayPal" , "eBay" , "Twitter" - > ( "Java12 Expression: This switch is for companies Google, Facebook, PayPal, eBay & Twitter" ) ; case "Apple" , "LinkedIn" - > ( "Java12 Expression: This switch is for companies Apple & LinkedIn" ) ; /** * it's also possible to do switch operation without a block and break */ default - > { break "Java12 Expression: Oops... Invalid company" ; } } ; log ( companyName ) ; } public static void log ( String result ) { System . out . println ( result ) ; } } |

IntelliJ IDEA Sonucu:
1 2 3 4 5 6 7 8 |
Enter company name from : Google , Facebook , PayPal , eBay , Twitter , LinkedIn , Apple Twitter Selected Company : Twitter Pre - Java12 : This switch is for companies Google , Facebook , PayPal , eBay & Twitter Java12 : This switch is for companies Google , Facebook , PayPal , eBay & Twitter Java12 Expression : This switch is for companies Google , Facebook , PayPal , eBay & Twitter |
Değişiklik-6) JVM Sabitleri API'si
java.lang.invoke.constant
: Bildiğiniz gibi Java sınıfı, çalışma zamanında tüm işlenenleri depolayan sabit bir havuza sahiptir.
Java12, çalışma zamanında sabitleri çağırmak için API ekler.
Java12'den kaldırılan özellikler:
Java12'den kullanımdan kaldırılan özellikler:
Java12 hakkında buraya eklemek istediğiniz kullanışlı bir öğreticiniz varsa bana bildirin.