JDK 15: התכונות החדשות ב- Java 15

ערכת הפיתוח של Java 15, יישום Oracle של הגרסה הבאה של Java SE (מהדורה רגילה), זמינה במהדורת הפקה היום, 15 בספטמבר 2020. נקודות השיא של JDK 15 כוללות גושי טקסט, מחלקות נסתרות, ממשק API לגישה לזיכרון זר, אספן הזבל Z, ותצוגות מקדימות של מחלקות אטומות, התאמת תבניות ורשומות.

JDK 15 הוא רק מהדורה קצרת טווח, רק כדי לקבל תמיכה בתמיכה של אורקל פרמייר למשך חצי שנה עד JDK 16 יגיע במרץ הבא. JDK 17, המהדורה הבאה לתמיכה ארוכת טווח, שתומכת על ידי אורקל במשך שמונה שנים, אמורה להגיע בעוד שנה מהיום, בהתאם לקצב המהדורה של שישה חודשים לאורקל עבור גרסאות Java SE.

מפתחים יכולים להסתכל על JDK 15 עכשיו כדי לקבל מושג מה יהיה ב- JDK 17, אמר ז'ורז 'סאאב, נשיא קבוצת Java Platform של אורקל. המהדורה הנוכחית של LTS היא JDK 11, שהגיעה בספטמבר 2018. מהדורות LTS מגיעות אחת לשלוש שנים. JDK 15 עוקב אחר JDK 14, ששוחרר ב -17 במרץ 2020. 

התכונות החדשות והשינויים ב- OpenJDK 15:

  • חממה שנייה של ממשק API לגישה לזיכרון זר, שיאפשר לתוכניות ג'אווה לגשת בבטחה וביעילות לזיכרון זר מחוץ לערימת ג'אווה. ה- API אמור להיות מסוגל לפעול על סוגים שונים של זיכרון זר, כגון ערימה מקורית, מתמשכת ומנוהלת. תוכניות ג'אווה רבות ניגשות לזיכרון זר, כגון Ignite ו- MapDB. ממשק ה- API יסייע במניעת העלויות והאי-חיזוי הכרוך באיסוף אשפה, שיתוף זיכרון בין תהליכים, וסידור וסיווג מחדש של תוכן זיכרון על ידי מיפוי קבצים לזיכרון. ממשק ה- Java API כרגע אינו מספק פתרון מספק לגישה לזיכרון זר. אך עם ההצעה החדשה, API לא אמור לפגוע בבטיחות ה- JVM. יכולת זו עוברת שלב מוקדם יותר בחממה ב- JDK 14, עם חידודים המוצעים ב- JDK 15. 
  • תצוגה מקדימה של שיעורים סגורים. יחד עם ממשקים, מחלקות אטומות מגבילות אילו מחלקות או ממשקים אחרים עשויים להרחיב או ליישם אותם. מטרות תכונה זו כוללות מתן אפשרות למחבר מחלקה או ממשק לשלוט באיזה קוד אחראי ליישומו, לספק דרך הצהרתית יותר מאשר מגדלי גישה להגבלת השימוש במעמד-על, ותמיכה בכיוונים עתידיים בהתאמת תבניות על-ידי ביסוס הממצה ניתוח דפוסים.
  • הסרת קוד המקור ותמיכה בבניית יציאות Solaris / SPARC, Solaris / x64 ו- Linux / SPARC, שהוצאו משימוש בהסרה ב- JDK 14 במטרה להסיר אותן במהדורה עתידית. פרויקטים ותכונות רבות בפיתוח כמו Valhalla, Loom ו- Panama דורשים שינויים משמעותיים בארכיטקטורת המעבד ובקוד הספציפי למערכת ההפעלה. ביטול התמיכה ביציאות Solaris ו- SPARC יאפשר לתורמים לקהילת OpenJDK להאיץ את הפיתוח של תכונות חדשות שיקדמו את הפלטפורמה קדימה. הן סולאריס והן SPARC הוחלפו בשנים האחרונות על ידי מעבדי מערכת ההפעלה לינוקס ואינטל.
  • רשומות, שהם שיעורים המשמשים כמובילים שקופים לנתונים בלתי ניתנים לשינוי, ייכללו בגרסת התצוגה המקדימה השנייה ב- JDK 15, לאחר הופעת הבכורה בתור תצוגה מקדימה מוקדמת ב- JDK 14. מטרות התוכנית כוללות תכנון של קונסטרוקציה מונחה עצמים המבטאת צבירת ערכים פשוטה, עוזרת למתכנתים להתמקד בדוגמנות נתונים בלתי ניתנים לשינוי במקום התנהגות ניתנת להרחבה, יישום אוטומטי של שיטות מונחות נתונים כגון שווים ומעריכים, ושמירה על עקרונות Java ארוכי טווח כגון הקלדה נומינאלית ותאימות הגירה. ניתן לחשוב על רשומות כעל צמרות סמלי. 
  • חתימות קריפטוגרפיות המבוססות על האלגוריתם החתימה הדיגיטלית אדוארדס-עקומה (EdDSA). EdDSA היא תכנית עקומה אליפטית מודרנית עם יתרונות על פני תוכניות חתימה קיימות ב- JDK. EdDSA יושם רק אצל חברת SunEC. EdDSA מבוקשת בגלל האבטחה והביצועים המשופרים שלה בהשוואה לתוכניות חתימה אחרות; הוא כבר נתמך בספריות הצפנה כגון OpenSSL ו- BoringSSL.
  • מימוש מחדש של ה- API מדור קודם DatagramSocket ידי החלפת מימושים הבסיסית של  java.net.datagram.Socketו java.net.MulticastSocketAPIs עם הטמעות פשוטה יותר מודרנית 1. קל לאתר באגים לתחזק 2. עבודה עם הנושאים וירטואלי הנבחנות בימים אלה פרויקט Loom. התוכנית החדשה היא מעקב אחר הצעת JDK Enhancement הצעה 353 שהטמיעה מחדש את ה- Socket API הישן. המימושים הנוכחיים של java.net.datagram.Socketו java.net.MulticastSocketבחזרה מועד כדי JDK 1.0 וזמן כאשר IPv6 היה עדיין בפיתוח. כך היישום הנוכחי של  MulticastSocket ניסיונות ליישב בין IPv4 ו- IPv6 בדרכים שקשה לשמור עליהם.
  • השבתה של נעילה מוטה כברירת מחדל ושלילת כל אפשרויות שורת הפקודה הקשורות. המטרה היא לקבוע את הצורך בתמיכה מתמשכת באופטימיזציה של סנכרון מורשת יקר לשמירה על נעילה מוטה, המשמשת במכונה הווירטואלית של HotSpot להפחתת תקורה של נעילה בלתי מתכוונת. למרות שחלק מיישומי Java עשויים לראות רגרסיה בביצועים עם נעילה מוטה מושבתת, רווחי הביצועים של נעילה מוטה הם בדרך כלל פחות ברורים מבעבר.
  • תצוגה מקדימה שנייה של התאמת תבניות עבור instanceof, בעקבות תצוגה מקדימה קודמת ב- JDK 14. התאמת תבניות מאפשרת לבטא בצורה קלה ותמציתית יותר לוגיקה נפוצה בתוכנית, בעיקר חילוץ מותנה של רכיבים מאובייקטים. שפות כגון Haskell ו- C # אימצו התאמת דפוסים בקיצור ובטיחותה.
  • כיתות נסתרות, כלומר כיתות שלא ניתן להשתמש בהן ישירות על ידי קוד לוואי של כיתות אחרות, מיועדות לשימוש במסגרות המייצרות כיתות בזמן ריצה, ומשתמשות בהן בעקיפין באמצעות השתקפות. ניתן להגדיר מחלקה נסתרת כחבר בקן בקרת גישה וניתן לפרוק אותה ללא תלות בכיתות אחרות. ההצעה תשפר את היעילות של כל השפות ב- JVM בכך שתאפשר לממשק API סטנדרטי להגדיר מחלקות נסתרות שאינן ניתנות לגילוי ובעלות מחזור חיים מוגבל. מסגרות בתוך JDK ומחוצה לו יוכלו ליצור דינמיות מחלקות שיכולות להגדיר במקום זאת מחלקות נסתרות. שפות רבות הבנויות על JVM נשענות על ייצור דינמי של מחלקות לצורך גמישות ויעילות. מטרות ההצעה כוללות: מתן אפשרות למסגרות להגדיר כיתות כפרטי יישום שאינם ניתנים לגילוי של המסגרת,כך שלא ניתן לקשר ביניהם מעמדות אחרים ולא לגלותם באמצעות השתקפות; תמיכה בהרחבת קן בקרת גישה עם שיעורים שאינם ניתנים לגילוי; ותמיכה בפריקה אגרסיבית של שיעורים שאינם ניתנים לגילוי, ולכן למסגרות יש את הגמישות להגדיר כמה שיותר. מטרה נוספת היא ביטול ה- API הלא סטנדרטי, misc.Unsafe::defineAnonymousClass, מתוך כוונה להיפטר מהסרה במהדורה עתידית. כמו כן, אין לשנות את שפת Java כתוצאה מהצעה זו.
  • אספן האשפה (ZGC) בוגר תכונה ניסיונית למוצר במסגרת הצעה זו. משולב ב- JDK 11, שהגיע בספטמבר 2018, ZGC הוא אספן אשפה מדרגי. ZGC הוצג כיכולת ניסיונית מכיוון שמפתחי ג'אווה החליטו שיש להביא תכונה בסדר גודל ומורכבות זו בזהירות ובהדרגה. מאז נוספו מספר שיפורים, החל מפריקת כיתות במקביל, אי-התחייבות של זיכרון שאינו בשימוש, ותמיכה בשיתוף נתונים בכיתה וכלה במודעות NUMA משופרת ונגיעה מוקדמת של ערימה רב. כמו כן, גודל הערמה המרבי הוגדל מארבעה טרה-בייט ל -16 טרה-בייט. ZGC מתייחסת לחששות ביצועים ביישומים הכוללים כמויות אדירות של נתונים, כגון למידת מכונה,כאשר המשתמשים רוצים להיות בטוחים שעיבוד הנתונים לא יהיה כפוף לחיזוי או להפסקות ארוכות בגלל איסוף האשפה. הפלטפורמות הנתמכות כוללות לינוקס, חלונות ו- MacOS.
  • גושי טקסט, המוצגים בתצוגה מקדימה הן ב- JDK 14 והן ב- JDK 13, נועדו לפשט את משימת כתיבת תוכניות Java על ידי כך שמקל על הבעת מחרוזות המשתרעות על פני מספר שורות קוד מקור, תוך הימנעות מרצפי בריחה במקרים נפוצים. בלוק טקסט הוא מילולי מחרוזת רב-שורה המונע את הצורך ברוב רצפי הבריחה, מעצב אוטומטית את המחרוזת באופן צפוי ומציע למפתח שליטה על הפורמט במידת הצורך. מטרת ההצעה לחוסמת טקסט היא שיפור הקריאות של מחרוזות בתוכניות Java המציינות קוד הכתוב בשפות שאינן Java. מטרה אחרת היא לתמוך בהעברה ממילולי מיתרים על ידי קביעה שכל מבנה חדש יכול לבטא את אותה מערך מחרוזות כמו מחרוזת מילולית, לפרש את אותם רצפי בריחה ולהתבצע באותה צורה כמו מילולי מחרוזת.מפתחי OpenJDK מקווים להוסיף רצפי בריחה לניהול שטח לבן מפורש ושליטה בקו חדש.
  • אספן האשפה של שננדואה בהפסקה נמוכה יהפוך לתכונת הפקה ויעבור משלב הניסוי. זה שולב ב- JDK 12 לפני שנה.
  • הסרת נאשורן, שהופיעה לראשונה ב- JDK 8 במרץ 2014, אך מאז הושמעה על ידי טכנולוגיות כמו GraalVM. הצעת OpenJDK 15 קוראת להסיר ממשקי API של Nashorn ואת כלי שורת הפקודה jjs המשמש להפעלת Nashorn.
  • הוצאה של מנגנון ההפעלה RMI, להסרה עתידית. מנגנון ההפעלה של RMI הוא חלק מיושן ב- RMI שהיה אופציונלי מאז Java 8. הפעלת RMI מטילה נטל תחזוקה שוטף. שום חלק אחר ב- RMI לא יופסל.