كل شيء عن Java12 - الميزات الجديدة والأمان وبيان تعبير التبديل (أمثلة)
نشرت: 2019-04-07 في 19th March 2019
، تم إصدار Java12. كما نعلم كان Java12
جزءًا من الإصدار السريع ، فقد تم إصداره في 6 أشهر فقط بعد إصدار Java11.
في هذا البرنامج التعليمي ، سنتعرف على جميع التغييرات والميزات الجديدة حول Java12.
شخصياً ، قمت بالتبديل إلى Java12 لجميع عمليات التطوير الخاصة بي ، ولكن من المبكر جدًا بالنسبة لدورة الإنتاج. احتفظ بهذا البرنامج التعليمي مرجعيًا عندما تريد التبديل إلى Java12 لجميع مشاريع الإنتاج الخاصة بك.
ما الجديد في Java12؟ الميزات الجديدة في Java12:
هناك عدد غير قليل من الميزات المتعلقة بسير العمل الداخلي والمستخدم في Java12 والتي تغيرت. لنلقِ نظرة على ما يوجد داخل Java 12.
التغيير 1) تفريغ الفئة المتزامنة
عادةً ما يفرغ جامع القمامة العادي المتغير غير المستخدم أثناء دورة GC ونلاحظ عادةً بعض التوقف / الإيقاف المؤقت في العملية ، أو زيادة وحدة المعالجة المركزية خلال ذلك الوقت. عادة لا نلاحظ ذلك.
مع ZGC
(Z Garbage Collector) - يدعم Java12 تفريغ الفئة المتزامن أيضًا. نظرًا لأن هذا يحدث أثناء دورة GC العادية ، فلا يوجد أي توقف مؤقت ولا مزيد من استخدام الذاكرة الإضافي أيضًا.
افتراضيًا ، يتم تمكين ZGC في Java12. لا مزيد من الإجراءات المطلوبة
كيفية تعطيل ZGC؟
- ما عليك سوى بدء تطبيقك باستخدام وسيطة سطر أوامر JVM
-XX:-ClassUnloading
Change-2) احصل على مزيد من التفاصيل حول JVM Crash
عندما يكون هناك خطأ OOM (نفاد الذاكرة) أو تعطل JVM ، عادةً ما تنشئ Java ملفات تفريغ بجميع التفاصيل.
1 |
- XX : HeapDumpPath =/ tmp / crunchify / - XX : + HeapDumpOnOutOfMemoryError |
باستخدام معلمات JVM هذه ، سيتم إنشاء ملفات التفريغ ضمن /tmp/crunchify/
المجلد على خطأ OOM.
يوجد خيار آخر مضاف في Java12:
1 |
- XX : + ExtensiveErrorReports |
سيتم إنشاء ملف سجل جديد باسم hs_err<pid>.log
مع كافة التفاصيل حول تعطل JVM. هذا مفيد جدًا لبيئة الإنتاج الخاصة بك إذا كنت تشاهد تعطلًا متكررًا وتريد تصحيح المزيد.
بشكل افتراضي ، يتم تعطيله ولكن يمكنك تمكين تقرير الأعطال الشامل عن طريق إضافة معلمة سطر أوامر JVM أعلاه.
التغيير 3) تنسيق الأرقام المضغوط
يضيف java.text دعمًا لتنسيق الأرقام المضغوط. يمكن ذكر 100o
كـ 1K
و 100000
يمكن ذكرها كـ 100K
.
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 ) ; } } |
نتيجة:
1 |
NumberFormat . Style . SHORT Result : 100K |
التغيير 4) تحسينات أمان Java
تغييرات security-libs/java.security
:
- عدم السماح والسماح بخيارات java.security.manager
- إذا
disallow
النظام ثم. لا يمكن استخدامsetSecurityManager
لتعيين مدير الأمان.
- إذا
- -groupname تمت الإضافة إلى keytool Key Pair Generation
- يمكن للمستخدم تحديد مجموعة مسماة عند إنشاء زوج مفاتيح.
- تخصيص توليد
PKCS12 keystore
- يتضمن الخوارزميات والمعلمات من أجل
- مفتاح الحماية
- حماية الشهادة
- ماك داتا
- يتضمن الخوارزميات والمعلمات من أجل
- أحداث أمنية جديدة في JFR
- ما هو JFR (مسجل طيران جافا)
- تمت إضافة 4 أحداث جديدة في JFR
- شهادة jdk.X509
- jdk.X509 التحقق
- jdk.TLS هاندشيك
- jdk.SecurityPropertyModification
Change-5) JEP 325: تبديل التعبيرات
Switch statement
المحسن مدعوم الآن في Java12.
- Java 12 على أساس
case L -> syntax
. هنا ليس هناك أي استراحة ضرورية. - استخدام تعبير التبديل
- هذا هو بيان التبديل المبسط
- إذا تمت مطابقة التسمية ، فسيتم تنفيذ التعبير الموجود على يمين تسمية السهم فقط.
- لا حاجة إلى بيان استراحة.
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:
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 |
التغيير - 6) JVM Constants API
java.lang.invoke.constant
: كما تعلم ، تحتوي فئة Java على مجموعة ثابتة تخزن جميع المعاملات في وقت التشغيل.
يضيف Java12 API لاستدعاء الثوابت في وقت التشغيل.
الميزات التي تمت إزالتها من Java12:
الميزات الموقوفة من Java12:
اسمحوا لي أن أعرف ما إذا كان لديك أي برنامج تعليمي مفيد حول Java12 والذي ترغب في تضمينه هنا.