Java 10 תכונות חדשות

מאמר זה הוא חלק מסדרה: • Java 10 LocalVariable Type-Inference

• שיפורי ביצועים של Java 10

• תכונות חדשות של Java 10 (מאמר נוכחי)

1. הקדמה

JDK 10, שהוא יישום של Java SE 10, שוחרר ב -20 במרץ 2018.

במאמר זה נסקור ונחקור את התכונות החדשות והשינויים שהוצגו ב- JDK 10.

2. הסקה מסוג משתנה מקומי

עקוב אחר הקישור למאמר מעמיק על תכונה זו:

הסרת סוג משתנה מקומית של Java 10

3. אוספים שאינם ניתנים לשינוי

ישנם מספר שינויים הקשורים לאוספים שאינם ניתנים לשינוי ב- Java 10.

3.1. העתק של()

java.util.List, java.util.Map ו java.util.Set כל אחד מהם קיבל שיטה סטטית חדשה copyOf (אוסף).

הוא מחזיר את העותק הבלתי ניתן לשינוי של הנתון אוסף:

@Test (צפוי = UnsupportedOperationException.class) בטל פומבי כאשרModifyCopyOfList_thenThrowsException () {List copyList = List.copyOf (someIntList); copyList.add (4); }

כל ניסיון לשנות אוסף כזה יביא java.lang.UnupportedOperationExceptionחריגת זמן ריצה.

3.2. toUnmodifiable * ()

java.util.stream.Collectors קבל שיטות נוספות לאיסוף זרם לבלתי ניתן לשינוי רשימה, מַפָּה אוֹ מַעֲרֶכֶת:

@Test (צפוי = לא נתמךOperationException.class) פומבי ריק כאשרModifyToUnmodifiableList_thenThrowsException () {רשימה evenList = someIntList.stream () .filter (i -> i% 2 == 0) .collect (Collectors.toUnmodifiableList ()); evenList.add (4); }

כל ניסיון לשנות אוסף כזה יביא לתוצאה java.lang.UnupportedOperationExceptionחריגת זמן ריצה.

4. אופציונלי * .orElseThrow ()

java.util. אופציונלי, java.util.OptionalDouble, java.util.OptionalIntו java.util.OptionalLongכל אחד מהם קיבל שיטה חדשה orElseThrow ()שלא לוקח שום ויכוח וזורק NoSuchElementExceptionאם אין ערך:

@ מבחן ציבורי בטל כאשר ListContainsInteger_OrElseThrowReturnsInteger () {Integer firstEven = someIntList.stream () .filter (i -> i% 2 == 0) .findFirst () .orElseThrow (); הוא (firstEven) .equals (Integer.valueOf (2)); }

זה שם נרדף וכעת הוא האלטרנטיבה המועדפת על הקיים לקבל()שיטה.

5. שיפורי ביצועים

עקוב אחר הקישור למאמר מעמיק על תכונה זו:

שיפורי ביצועים של Java 10

6. מודעות למכולות

JVMs מודעים כעת להפעלה במיכל Docker ויחלוץ תצורה ספציפית למכולה במקום לבצע שאילתות על מערכת ההפעלה עצמה - היא חלה על נתונים כמו מספר המעבדים והזיכרון הכולל שהוקצו למיכל.

עם זאת, תמיכה זו זמינה רק עבור פלטפורמות מבוססות לינוקס. תמיכה חדשה זו מופעלת כברירת מחדל וניתן להשביתה בשורת הפקודה באמצעות JVM:

-XX: -UseContainerSupport

כמו כן, שינוי זה מוסיף אפשרות JVM המספקת את היכולת לציין את מספר המעבדים בהם ה- JVM ישתמש:

-XX: ActiveProcessorCount = ספירה

כמו כן, שלוש אפשרויות JVM חדשות נוספו כדי לאפשר למשתמשי מכולה של Docker להשיג שליטה דקה יותר בכמות זיכרון המערכת שתשמש ל- Java Heap:

-XX: InitialRAMPercentage -XX: MaxRAMPercentage -XX: MinRAMPercentage

7. אישורי שורש

מחסן המפתחות של cacerts, שהיה בתחילה ריק עד כה, נועד להכיל קבוצה של אישורי שורש שבהם ניתן לבסס אמון בשרשראות האישורים המשמשות פרוטוקולי אבטחה שונים.

כתוצאה מכך, רכיבי אבטחה קריטיים כגון TLS לא פעלו כברירת מחדל תחת בניית OpenJDK.

עם Java 10, אורקל הפכה למקור פתוח את אישורי השורש בתוכנית Java SE Root CA של אורקל במטרה להפוך את OpenJDK builds לאטרקטיבית יותר עבור מפתחים וכדי לצמצם את ההבדלים בין builds אלה ל- Oracle JDK builds.

8. פידות והסרות

8.1. אפשרויות ושורת פקודה וכלים

כְּלִי ג'אווה הוסר מג'אווה 10 שיצר כותרות C וקבצי מקור שנדרשו ליישום שיטות מקוריות - עכשיו, javac -h ניתן להשתמש במקום.

כלי שיטור היה הכלי מבוסס ממשק המשתמש ליצירת וניהול קבצי מדיניות. זה הוסר כעת. המשתמש יכול להשתמש בעורך טקסט פשוט לביצוע פעולה זו.

הוסר java -Xprofאוֹפְּצִיָה. האפשרות שימשה לפרופיל התוכנית הפועלת ולשלוח נתוני פרופיל לפלט רגיל. המשתמש אמור להשתמש כעת jmap כלי במקום.

8.2. ממשקי API

החבילה java.security.acl שהוצא משימוש סומנה עבור Removal = true והיא כפופה להסרה בגרסה עתידית של Java SE. זה הוחלף על ידי java.security.Policy ושיעורים קשורים.

באופן דומה, Java.security. ממשקי API של {Certificate, Identity, IdentityScope, Signer} מסומנים. forRemoval = נכון.

9. גרסאות שחרור מבוסס זמן

החל מג'אווה 10, אורקל עברה למהדורה מבוססת הזמן של ג'אווה. יש לכך השלכות:

  1. מהדורת Java חדשה מדי חצי שנה. המהדורה של מרץ 2018 היא JDK 10, המהדורה של ספטמבר 2018 היא JDK 11, וכן הלאה. אלה נקראים מהדורות תכונה וצפויים להכיל לפחות תכונה אחת או שתיים משמעותיות
  2. התמיכה במהדורת התכונה תימשך רק שישה חודשיםכלומר, עד לשחרור התכונה הבאה
  3. שחרור תמיכה לטווח ארוך יסומן כ- LTS. התמיכה בשחרור כזה תהיה לשלוש שנים
  4. Java 11 תהיה מהדורת LTS

ג'אווה - גרסה יכיל כעת את תאריך ה- GA, מה שמקל על הזיהוי בן גיל המהדורה:

$ java - גרסת openjdk "10" גרסה "10" 2018-03-20 OpenJDK Runtime Environment 18.3 (build 10 + 46) OpenJDK 64-Bit Server VM 18.3 (build 10 + 46, מצב מעורב)

10. מסקנה

במאמר זה ראינו את התכונות והשינויים החדשים שהביאו Java 10.

כרגיל, ניתן למצוא קטעי קוד ב- GitHub.

« שיפורי ביצועים קודמים של Java 10