תכונות של Java 11

אנו עדיין לא שקופים בגרסת Java 10 לעומק, וכבר יש כאן Java 11. Java 11 חשובה לא מעט תוך כדי. Oracle שינתה את דגם התמיכה שלה ופיתחה רכבת שטח שתספק עדכונים מהירים, בערך כל 6 חודשים. הם שינו את דגם הרישיונות והתמיכה, שמשמעו אם תורידו את Oracle JDK של Java 11, עליכם לשלם עבור שימוש מסחרי.

האם זה אומר שעלי לשלם עבור Java מעתה והלאה? לא. לא בהכרח אלא אם תורידו את Oracle JDK ותשתמשו בו בייצור.

הערה: IntelliJ IDEA 2018.2.4 Community Edition כבר מספקת תמיכה ב-Java 11.

1. למה Java 11 חשובה?

Java 11 היא הגרסה השנייה לאחר Java 8 שנחשבת להיות LTS. מאז Java 11, Oracle JDK כבר לא תהיה חינמית לשימוש מסחרי. ניתן להשתמש בה בשלבי פיתוח, אך כדי להשתמש בה מסחרית, עליכם לרכוש רישיון. אם לא, יתכן שתקבלו חשבונית מאורקל בכל יום! Java 10 הייתה ה־Oracle JDK החינמית האחרונה שניתן היה להוריד. אורקל הפסיקה את תמיכת Java 8 מינואר 2019. תצטרכו לשלם עבור יותר תמיכה. ניתן להמשיך להשתמש בה, אך לא תקבלו עדכוני תיקונים או אבטחה.

Oracle לא תספק תמיכה לטווח ארוך (LTS) חינם לכל גרסת Java מאז Java 11.

בעוד ש-Oracle JDK כבר אינו חינמי, תמיד אפשר להוריד את הבניות של Open JDK מ-Oracle או ספקים אחרים כגון AdoptOpenJDK, Azul, IBM, Red Hat, וכו '. לדעתי, אלא אם אתה מחפש שימוש ברמת אנטרפרייז עם רצון לשלם על דמי תמיכה, אפשר להשתמש ב-OpenJDK ולשדרג אותם כשצריך.

2. איזו בניית JDK אכן כדאי להוריד ומהם היתרונות של כל אחת מהן?

מאחר ש-Oracle יצרו רכבת יצור בה גרסה חדשה תגיע כל שישה חודשים, אם אתה משתמש ב-Open JDK החינמי של Oracle, תצטרך לעדכן אותו כל שישה חודשים, מאחר ש-Oracle לא תספק עדכונים חינמיים לאחר שנפתחת הגרסה החדשה. זה יכול להיות אתגר להתאים לחברה. לשלם על תמיכה מסחרית ל-Oracle ולעבור רק מגרסה LTS אחת לגרסה LTS הבאה. כך תקבל את כל העדכונים והתמיכה עבור Java 11 עד 2026. אפשר להוריד את Java 17 ב-2022. להישאר על גרסה חינמית של Java גם לאחר שהתמיכה בה מסתיימת. אם כי לא תקבל עדכוני אבטחה ויכול להיפתחו איומי אבטחה.

Oracle לא תספק תמיכה מסחרית או עדכונים עבור Java 9 ו-Java 10. עליך לחפש בניות אלטרנטיביות אחרות כדי להמשיך להשתמש בהן בחינם.

הבנתי את המעמסה שבגרסת Java 11, נבחן עכשיו את התכונות החשובות ביותר ב-Java 11 עבור מפתחים. נדון גם בכמה JEPs חשובים. שים לב: JavaFX תהיה זמינה כמודול נפרד ולא תתלויה בלוח הזמנים לסדרת הוצאות של JDK של Java במחזור חידושים של 6 חודשים.

3. איך להוריד את גרסת ה-Java 11 בחינם?

ניתן להוריד את גרסת OpenJDK המוכנה לייצור מהקישור הזה קישור. הבינאריים זמינים בפורמט tar או zip, אז פשוט פתח אותם וקבע את משתני הסביבה כדי להשתמש במהדר ג'אווה ובפקודות ג'אווה.

4. תכונות של Java 11

חלק מתכונות Java 11 החשובים הם:

  • הרצת קובץ Java בפקודה יחידה
  • שיטות ייחודיות חדשות במחלקת String
  • תחביר מקומי למשתנים למחלקת Lambda
  • שליטה גבוהה יותר בגישה לבסיס
  • JEP 321: לקוח HTTP
  • קריאה/כתיבה של מחרוזות מתוך קבצים
  • JEP 328: מקלט טיסה

בואו נדון בתכונות החדשות שהוצגו עם Java 11 מתהליך ה-JEP.

4.1) הרצת קובץ Java בפקודה יחידה

שינוי עיקרי הוא שאין צורך לקומפל את קובץ המקור של Java עם כלי javac תחילה. ניתן להריץ את הקובץ ישירות בעזרת פקודת java והיא מקומפלת באופן משתמע. תכונה זו נכנסת תחת JEP 330. הנה לצצה על השיטות החדשות של מחלקת מחרוזת Java שהוצגו ב-Java 11:

4.2) שיטות מחרוזת Java

isBlank() – שיטת מופע זו מחזירה ערך בוליאני. מחרוזות ריקות ומחרוזות עם רווחים לבנים בלבד מתייחסות כמחרוזות ריקות.

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        // הקוד שלך כאן!
        
        System.out.println(" ".isBlank()); //true
        
        String s = "Anupam";
        System.out.println(s.isBlank()); //false
        String s1 = "";
        System.out.println(s1.isBlank()); //true
    }
}

lines() שיטה זו מחזירה נתון זרם של מחרוזות, שהוא אוסף של כל החתיכות האחרות שנפרצו לפי שורות.

import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) throws Exception {
        
        String str = "JD\nJD\nJD"; 
        System.out.println(str);
        System.out.println(str.lines().collect(Collectors.toList()));
    }
}

הפלט של הקוד לעיל הוא: strip(), stripLeading(), stripTrailing() strip() – מסיר את הרווחים משני הצדדים של המחרוזת.

אבל כבר יש לנו trim(). אז מה הצורך ב־strip()? strip() הוא התפתחות "מודעת ל־Unicode" של trim(). כאשר נכנס trim(), Unicode לא התפתח. כעת, ה־strip() החדש מסיר את כל סוגי הרווחים המובילים והמסיימים (בדוק את השיטה Character.isWhitespace(c) כדי לדעת אם תו Unicode הוא רווח או לא)

דוגמה שמשתמשת בשלושת השיטות הנ"ל מוצגת למטה:

public class Main {
    public static void main(String[] args) throws Exception {
        // הקוד שלך כאן!
        
        String str = " JD "; 
        System.out.print("Start");
        System.out.print(str.strip());
        System.out.println("End");
        
        System.out.print("Start");
        System.out.print(str.stripLeading());
        System.out.println("End");
        
        System.out.print("Start");
        System.out.print(str.stripTrailing());
        System.out.println("End");
    }
}

הפלט בקונסול מהקוד לעיל הוא: repeat(int) שיטת ה־repeat פשוט משנה את המחרוזת הכפולה בכמות המספרים המוזכרת בשיטה בצורת int.

public class Main {
    public static void main(String[] args) throws Exception {
        // הקוד שלך כאן!
        
        String str = "=".repeat(2);
        System.out.println(str); //prints ==
    }
}

4.3) תחביר משתנה מקומי עבור פרמטרי למבדה

JEP 323, התחברות מקומית עבור פרמטרים של הלמבדות היא התכונה היחידה ששוחררה ב-Java 11. ב-Java 10, נכנסה הגדרת טיפוס מקומיים אוטומטית. לכן יכולנו להשעין את סוג המשתנה מהערך הימני – var list = new ArrayList<String>(); JEP 323 מאפשרת להשתמש ב־var כדי להצהיר על פרמטרים פורמליים של ביטוי למבדה שמסוגלת להשתעת באופן מקומי. כעת אנו יכולים להגדיר:

(var s1, var s2) -> s1 + s2

זה היה אפשרי גם ב-Java 8 אך הוסר ב-Java 10. כעת זה חוזר ב-Java 11 כדי לשמור על הידור דברים. אבל למה זה נדרש כאשר אנו יכולים פשוט לדלג על הטיפוס בלמבדה? אם תרצה להחיל אישור כמו @Nullable, אי אפשר לעשות זאת בלעדי קביעת הטיפוס. המגבלה של תכונה זו – עליך לציין את הטיפוס var על כל הפרמטרים או שום אחד. דברים כמו הבאים אינם אפשריים:

(var s1, s2) -> s1 + s2 //no skipping allowed
(var s1, String y) -> s1 + y //no mixing allowed

var s1 -> s1 //not allowed. Need parentheses if you use var in lambda.

4.4) בקרת גישה מבוססת קינן

לפני Java 11 זה היה אפשרי:

public class Main {
 
    public void myPublic() {
    }
 
    private void myPrivate() {
    }
 
    class Nested {
 
        public void nestedPublic() {
            myPrivate();
        }
    }
}

שיטה פרטית של המחלקה הראשית נגישה מהמחלקה המקוננת למעלה בדרך הבאה. אך אם נשתמש ב־רפלקציה ב-Java, זה יחזיר IllegalStateException.

Method method = ob.getClass().getDeclaredMethod("myPrivate");
method.invoke(ob);

Java 11 שליטה מקוננת בגישה פתרון בבעיה זו בשקפים. המחלקה java.lang.Class מציעה שלושה שיטות ב- API של השקפים: getNestHost(), getNestMembers(), ו- isNestmateOf().

4.5) JEP 309: קבועים דינמיים בקבצי מחלקה

פורמט קובץ המחלקה של Java מרחיב כעת תמיכה בצורת קבוע חדשה, CONSTANT_Dynamic. מטרתו של JEP זה היא להפחית את עלות התפרקות והפרעה בפיתוח צורות חדשות של הגבלות קבצי מחלקה הניתנות למימוש, על ידי יצירת צורת קבוע חדשה אחת שניתן לפרמטריזציה עם התנהגות שסופקה על ידי המשתמש. זה משפר את הביצועים

4.6) JEP 318: Epsilon: מאסטר מזוגות מחזורי

בניגוד ל-GC של JVM שאחראי להקצאת זיכרון ושחרורו, Epsilon מקצה רק זיכרון. הוא מקצה זיכרון לדברים הבאים:

  • בדיקות ביצועים.
  • בדיקות לחץ זיכרון.
  • בדיקות ממשק VM.
  • עבודות בעלות חיי מחזור קצרים במיוחד.
  • שיפורים בזמן המתנה אחרונים.
  • שיפורים בקצב העבודה האחרון.

עכשיו Elipson טוב רק לסביבות בדיקה. זה יוביל ל OutOfMemoryError בייצור ויגרום לתוכניות להתקלקל. היתרון של Elipson הוא אין עליות זיכרון. לכן זה יציג תוצאות בדיקה מדויקות של ביצועים ולא נוכל עוד להפעיל GC כדי לעצור אותו. הערה: זהו תכונת ניסיונית.

4.7) JEP 320: הסרת מודולי Java EE ו-CORBA

המודולים כבר הושלמו בגרסת Java 9. הם הוסרו לחלוטין כעת. החבילות הבאות הוסרו: java.xml.ws, java.xml.bind, java.activation, java.xml.ws.annotation, java.corba, java.transaction, java.se.ee, jdk.xml.ws, jdk.xml.bind

4.8) JEP 328: Flight Recorder

מקליט הטיסה, שהיה לפני כן תוסף מסחרי ב-Oracle JDK, כעת פתוח לקוד המקור מאז ש-Oracle JDK אינו חינמי יותר. JFR הוא כלי פרופילינג המשמש לאיסוף נתוני אבחון ופרופיל מיושרים מיישום Java הרץ. העלות בביצועים שלו היא בלתי מזהה ובדרך כלל נמוכה מ- 1%. לכן ניתן להשתמש בו ביישומים בסביבות הייצור.

4.9) JEP 321: לקוח HTTP

Java 11 תקנה את ממשק ה- Http CLient. ה- API החדש תומך בשני פרוטוקולים, HTTP/1.1 ו-HTTP/2. הוא מיועד לשפר את הביצועים הכלליים של שליחת בקשות על ידי לקוח וקבלת תגובות מהשרת. הוא תומך גם בצורה טבעית ב- WebSockets.

4.10) קריאה/כתיבה של מחרוזות לקובץ וממנו

Java 11 מתאמץ להקל על קריאה וכתיבה של מחרוזת. הוא הכניס את השיטות הבאות לקריאה וכתיבה מהקובץ או אליו:

  • readString()
  • writeString()

הקוד הבא מציג דוגמה לכך

Path path = Files.writeString(Files.createTempFile("test", ".txt"), "This was posted on JD");
System.out.println(path);
String s = Files.readString(path);
System.out.println(s); //This was posted on JD

4.11) JEP 329: אלגוריתמים קריפטוגרפיים ChaCha20 ו־Poly1305

Java 11 מספק יישומי ChaCha20 ו־ChaCha20-Poly1305. אלגוריתמים אלו יוטמעו בספק SunJCE.

4.12) JEP 315: שיפור Intrinsics של Aarch64

שיפור ה-Intrinsics הקיימים של מחרוזות ומערכים, ויישום Intrinsics חדשים לפונקציות sin, cos, ו־log של java.lang.Math, על מעבדים AArch64.

4.13) JEP 333: ZGC: מאסטר משאבים לא לטיים (מבחן)

Java 11 הכניס GC בעל לטים נמוך. זהו תכונה ניסיונית. נעים לראות שאורקל נותן חשיבות ל-GC.

4.14) JEP 335: הוציאו משימוש את מנוע ה-JavaScript Nashorn

מנוע ה-JavaScript Nashorn ו- APIs הם מופסקים, וכך מציינים שהם יוסרו בהוצאות הבאות.

5. מסקנה

עברנו על התכונות החשובות והעדכונים שניתנו ב-Java 11. נתראה בקרוב כאשר יושק גרסה 12 של Java.

Source:
https://www.digitalocean.com/community/tutorials/java-11-features