JavaRush /בלוג Java /Random-HE /Java 12 כבר כאן: מה חדש?

Java 12 כבר כאן: מה חדש?

פורסם בקבוצה
אז, ג'אווה הופיעה במספר 12. ולמרות שזו לא מהדורת LTS (כלומר, לא תמיכה לטווח ארוך, לא מהדורה שתתמך לאורך זמן. גרסה 11 נחשבת לגרסה הראשונה של LTS עם שמונה- תקופת תמיכה של שנה ), דברים מעניינים הופיעו בעדכוני זה. בואו נסתכל על החשובים שבהם. נזכיר שב-Java, הצעות שינוי מקוצרות כ-jeps (מ-JDK Enhancement Proposal). Java 12 כבר כאן: מה חדש?  - 1

JDK 12 של Jep הכי מעניין

189: Shenandoah: אוסף אשפה בזמן הפסקה נמוכה (ניסיוני) אוסף האשפה, Shenandoah, משתמש באלגוריתם חדש שמפחית את זמן הריצה על ידי ניקוי בו-זמנית עם הפעלת שרשורי Java. במקרה זה, זמן ההשהיה בשננדואה יהיה זהה ללא קשר לגודל הערימה. מסיבה כלשהי, אורקל לא כללה את Sheandoah בבניית הגרסה ה"רשמית" שלה, למרות העובדה שהמפתחים רואים בתכונה זו כאחת החשובות במהדורה החדשה. אז אם אתה מתכנן לנסות את ה-Garbage Collector המתקדם, אתה צריך להשתמש ב-builds של צד שלישי, כגון Azul . 230: Microbenchmark Suite Microbenchmark הוא microbenchmark שמודד את הביצועים של אלמנט קטן כלשהו. ב-Java, הם נכתבים ומופעלים באמצעות מסגרת JMH. מאז גרסה 12 נוספה JMH ל-JDK וכבר יש בדיקות שנכתבות בו, מה שמקל על המפתחים. 325: Switch Expressions (Preview) צורה חדשה של כתיבת ביטוי עם הצהרת switch. דף התכונה מספק קוד לדוגמה באמצעות מתג מסורתי, שבו שימוש מתמיד ב-break הופך אותו למילולית שלא לצורך, מה שמוביל לשגיאות אקראיות תכופות.
switch (day) {
    case MONDAY:
    case FRIDAY:
    case SUNDAY:
        System.out.println(6);
        break;
    case TUESDAY:
        System.out.println(7);
        break;
    case THURSDAY:
    case SATURDAY:
        System.out.println(8);
        break;
    case WEDNESDAY:
        System.out.println(9);
        break;
}
מחברי העדכון מציעים להציג צורה חדשה של תווית המתג "מקרה L ->" כדי לציין בבירור שרק הקוד מימין לתווית יבוצע אם התווית הזו מתאימה. לפיכך, ניתן לקצר משמעותית את הקוד המוצג לעיל באמצעות התחביר החדש:
switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
    case TUESDAY                -> System.out.println(7);
    case THURSDAY, SATURDAY     -> System.out.println(8);
    case WEDNESDAY              -> System.out.println(9);
}
334: JVM Constants API מאגר הקבועים מכיל מה שנקרא קבועים הניתנים לטעינה. אלו הם ערכים, למשל מסוג String או כל סוג פרימיטיבי, כמו גם חפצים בזמן ריצה, כגון מחלקות ושיטות. כאשר עובדים עם קבצי מחלקה, מתכנתים ייהנו מכלים נוחים לתפעול קבועים הניתנים לטעינה. מחברי הג'יפ הזה החלו לפתור בעיה זו על ידי הצגת סוגים חדשים מבוססי ערכים של קישורים סמליים, שכל אחד מהם יתאר סוג מסוים של קבועים. קוד חדשנות . 340: יציאת AArch64 אחת, לא שתיים השם המורכב הזה מסתיר פתרון לבעיה שהתעוררה ב-Java 9, כאשר יציאות ARM של 64 סיביות של Oracle ו-aarch64 מ-Red Hat הופיעו בערכה באותו זמן. יתרה מכך, כבר בזמן השחרור של JDK 11, אפילו אורקל עצמה לא תמכה בגרסת 64 סיביות של יציאות אורקל. אז עכשיו יציאות ה-64 סיביות של Oracle הוסרו, והותירו 32 סיביות ARM32 ו-64 סיביות, פרודוקטיביות יותר, aarch64. 341: Default CDS Archives עדכון נחמד מאוד מכיוון שהוא באמת מאיץ את השקת האפליקציה. זה לא סוד שכאשר יישום Java מתחיל, מספר עצום של מחלקות מתחיל להיטען, וזה תהליך ארוך למדי. CDS קיצור של Class Data Sharing, ופונקציה זו מאפשרת לך לארוז את כל המחלקות הללו שהושקו בעת ההפעלה לתוך ארכיון שיתוף נתוני מחלקות מיוחד, תוך שימוש ברשימת ברירת המחדל של אותן מחלקות. כתוצאה מכך, מהירות השקת האפליקציה עולה באופן משמעותי. 344: Abortable Mixed Collections for G1 G1 הוא אספן אשפה שהפך לאספן האשפה הראשי ב-JDK 9, והחליף את Parallel GC. ב-Java 10, G1 למד לאסוף אשפה במספר שרשורים. עם זאת, לא כולם היו מרוצים מעבודתו; אחת הבעיות העיקריות הייתה הפסקות ארוכות. כעת ניתן לבטל אותם. G1, בהתבסס על ניתוח של התנהגות התוכנית, קובע את כמות העבודה, ולאחר מכן אוסף אובייקטים "חיים" לתוך סט Collection עד שהוא אוסף הכל, ללא הפסקה. לעתים קרובות G1 פספס את החישוב של כמות העבודה ועבד יותר מדי זמן. לאחר הטמעת jep-344, G1 יכול לעבור לאיסוף אשפה מצטבר ואם השלב הבא לוקח זמן רב יותר מהסביר, ניתן לבטל את השלב הזה. 346: החזר מיידית זיכרון מחויב שלא נעשה בו שימוש מ-G1 ועוד כמה עדכונים במחנה של אסמבלר ה-G1 הנ"ל. לפעמים קרה שהיה חבורה של זיכרון ערימת ג'אווה, אבל אף אחד לא השתמש בו, הזיכרון הזה. ב-Java 12, כעת תוכל "להחזיר" זיכרון לא פעיל למערכת ההפעלה. בעבר, זה היה מאוד נדיר לגרום ל-G1 לוותר על הזיכרון, אבל עכשיו הכל פושט. עם התכונה החדשה, האפליקציה מוגדרת כלא פעילה אם פג תוקף המרווח מאז הבנייה האחרונה ואין מחזור במקביל. מצב אחר הוא אם או אם הפונקציה getloadavg() אשר מנוטרת במשך זמן מה, מראה עומס מתחת לסף הקביל שנקבע. אם מתרחש אחד משני אירועים, מתחיל איסוף אשפה חלקי. מה אין ל-Java 12: מילות מחרוזות גולמיות מפתחים רבים התעניינו בתכונה זו, אך היא מעולם לא הופיעה במהדורה זו. מחבריו החליטו שהוא עדיין זקוק לעבודה. אז, אנו מעזים לקוות שפונקציה לעבודה נוחה עם מילוליות מחרוזות תופיע באחת מהגרסאות הבאות של Java. תמיכה במילולי מחרוזת גולמיים מאפשרת לך לעבוד עם מידע מחרוזת ללא קשר לשפה. זה מבטל את הצורך במיגון. שימושי במיוחד בביטויים רגולריים, שבהם נעשה שימוש נרחב בהלוכסנים האחוריים, וב-Windows-path, שבהם נעשה שימוש בקו נטוי אחורי כמפריד. כלומר, כדי להימנע ממבנים כאלה: C:\\My\\Test\\Pack\\
כל מתכנת נתקל לא פעם בקושי כזה או אחר בעבודתו. לפעמים הם קשורים לחוסר הניסיון של המפתח, אבל לפעמים עם חוסר השלמות של הכלי עצמו. Java היא שפה נהדרת, אבל היא רחוקה מלהיות מושלמת. אולי כבר נתקלת במשהו ב-Java ואתה יודע מה אתה רוצה לשנות ב"כלי" שלך (שפה)? שתפו בתגובות!

מסקנות

לא הייתה מהפכה ב-Java 12. עם זאת, אף אחד לא תכנן זאת. עם זאת, מספר חידושים מכוונים לייעל את פעולת האפליקציות ולהאיץ את העבודה, ואלה חדשות טובות. אגב, IDEA כבר תומך ב-JDK 12, אז אתה יכול לנסות את היכולות שלו. כמובן, עדכונים מעטים משפיעים ישירות על מתחילים, למרות שגם מי שזה עתה התחיל ללמוד JavaRush יכול לשחק עם המתג החדש (לאחר הגדרת הדגל --enable-preview).
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION