תכונות ושיפור של Java 9



המסגרת המודולרית שפותחה תחת Project Jigsaw ותכונות Java 9 העיקריות בבלוג זה הן JShell (כלי REPL), שינויים חשובים ב- API ושינויים ברמת JVM.

שחרורם של תכונות Java 9 ו- Java 9 הוא אבן דרך עבור המערכת האקולוגית של Java.חשוב לעדכן את המהדורות החדשות כדי להתעדכן בטכנולוגיה ולהבין את הצורך מאחורי מה שמוצג יקרב אותך יותר ל .המסגרת המודולרית שפותחה במסגרת Project Jigsaw תהיה חלק מהמהדורה הזו של Java SE והתכונות העיקריות לכך הן ה- JShell (כלי REPL), שינויים חשובים ב- API ושינויים ברמת JVM לשיפור הביצועים והדיפוי של ה- JVM.

לפני שנפרום את תכונות Java 9 בפירוט הבה נציץ בגרסאות Java הקודמות ונראה מה היו החסרונות וכיצד Java 9 סייעה להתגבר על חריגות אלה: -





  • פלטפורמת Java Standard Edition ו- JDK לא היו ניתנים למכשירי מחשוב קטנים
  • לא היה אבטחה ותחזוקה כוללת של JDK
  • לא חל שיפור כולל בביצועי היישומים
  • היה קשה למפתחי Java לבנות ולשמור על ספריות הקוד ויישומים גדולים יותר, הן עבור פלטפורמות Java SE והן EE.

כיצד להתקין ליקוי חמה

בפוסט בבלוג זה אסווג את תכונות Java 9 באופן הבא:



  1. עבד עדכוני API ב- Java 9
  2. לקוח HTTP / 2 בג'אווה 9
  3. Java Shell Scripting (Read-Eval-Print-Loop) ב- Java 9
  4. קבצי JAR מרובי-שחרור זמינים ב- Java 9
  5. תכונות עדכונים נוספים בנושא מקביליות ב- Java 9
  6. פרויקט פאזל בג'אווה 9

מה חדש בג'אווה 9?

בחרתי כמה תכונות חדשות של Java 9, שלדעתי כדאי לדעת עליהן. בואו נראה מהן התכונות הבאות: -

עבד עדכוני API ב- Java 9

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

  • קבלת ה- PID של תהליך ה- JVM הנוכחי וכל התהליכים האחרים שהולידו ה- JVM
  • ספר את התהליכים הפועלים במערכת כדי לקבל מידע כגון שימוש ב- PID, שם ומשאבים
  • ניהול עצים בתהליך
  • ניהול תהליכי משנה

בואו נסתכל על קוד לדוגמא, שמדפיס את ה- PID הנוכחי כמו גם את מידע התהליך הנוכחי:



מחלקה ציבורית NewFeatures {public static void main (String [] args) {ProcessHandle currentProcess = ProcessHandle.current () System.out.println ('PID:' + currentProcess.getPid ()) ProcessHandle.Info currentProcessInfo = currentProcess.info () System.out.println ('מידע:' + currentProcessInfo)}

לקוח HTTP / 2 בג'אווה 9

תכונה זו של Java 9 צפויה להשתנות במהדורות הבאות ואולי אף להסיר אותה לחלוטין.

מוקדם יותר מפתחים נוהגים להשתמש בספריות של צד שלישי, כגון אפאצ'י HTTP, ג'רזי וכן הלאה. בנוסף לכך, ה- HTTP API של Java קדום למפרט HTTP / 1.1 והוא סינכרוני וקשה לתחזוקה. מגבלות אלה דרשו את הצורך להוסיף API חדש. ממשק ה- API החדש של לקוח HTTP מספק את הדברים הבאים:

  • ממשק API פשוט ותמציתי לטיפול ברוב בקשות ה- HTTP
  • תמיכה במפרט HTTP / 2
  • הופעה יותר טובה
  • אבטחה טובה יותר
  • עוד כמה שיפורים

בואו נראה קוד לדוגמה להכנת בקשת HTTP GET באמצעות ממשקי ה- API החדשים. להלן הגדרת המודול המוגדרת בקובץ module-info.java:

תכונות חדשות של המודול {דורש jdk.incubator.httpclient}

הקוד הבא משתמש ב- API של לקוח HTTP, שהוא חלק ממודול jdk.incubator.httpclient:

ייבא jdk.incubator.http. * ייבא java.net.URI מחלקה ציבורית Http2Feature {ציבורי ריק סטטי ריק (String [] args) זורק חריג {HttpClient לקוח = HttpClient.newBuilder (). build () HttpRequest בקשה = HttpRequest .newBuilder ( URI חדש (http://httpbin.org/get)) .GET () .version (HttpClient.Version.HTTP_1_1) .build () HttpResponse.String response = client.send (בקשה, HttpResponse.BodyHandler.asString ()) System.out.println ('קוד מצב:' + respons.statusCode ())
System.out.println ('גוף התגובה:' + respons.body ())}}}

Java Shell Scripting (Read-Eval-Print-Loop) ב- Java 9

בוודאי ראית שפות כגון רובי, סקאלה, גרובי, קלוז'ור ואחרות שולחות עם כלי, המכונה לעתים קרובות REPL ( קרא-הערך-הדפס-לולאה ). כלי REPL זה שימושי ביותר לנסות את תכונות השפה. לדוגמא, ב- Scala נוכל לכתוב תוכנית Hello World פשוטה בשם scala> println ('שלום עולם')

חלק מהיתרונות של JShell REPL הם כדלקמן:

  • מפתחים מנוסים יכולים לבצע אב טיפוס מהיר ולהתנסות לפני שהם מאמצים אותו בבסיס הקוד הראשי שלהם
  • מפתחי Java יכולים כעת להתפאר ב- REPL

בואו נפעיל את הפקודה JShell, כפי שמוצג בתמונה הבאה:

יישום רשימה מקושרת בסי

דוגמא ל- JShell Hello World - Java 9 - Edureka

קבצי JAR מרובי-שחרור זמינים ב- Java 9

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

הנה המחשה של קבצי ה- JAR הנוכחיים:

שורש צנצנת - כיתה - B.class - סי קלאס

כך נראים קבצי JAR מרובי-שחרור:

שורש צנצנת - כיתה - B.class - סי קלאס - META-INF - גרסאות 9 - כיתה - 10 - B.class

באיור הקודם, קבצי ה- JAR תומכים בקבצי מחלקה לשתי גרסאות Java –9 ו- 10.

לכן, כאשר ה- JAR מוקדם יותר מבוצע ב- Java 9, ה- A. class תחת הגרסאות - 9 תיקיות נאספות לביצוע.

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

תכונות עדכונים נוספים בנושא מקביליות ב- Java 9

בעדכון זה, מחלקה חדשה, java.util.concurrent.Flow הוצגה, שמקננת ממשקים התומכים ביישום מסגרת הרשמה לפרסום. מסגרת ההרשמה לפרסום מאפשרת למפתחים לבנות רכיבים שיכולים לצרוך אסינכרוני זרם נתונים חי על ידי הגדרת מפרסמים המפיקים את הנתונים ומנויים הצורכים את הנתונים באמצעות מנוי, המנהל אותם. ארבעת הממשקים החדשים הם כדלקמן:

כיצד להשתמש בשיטת הפיצול ב- Java
  • java.util.concurrent.Flow.Publisher
  • java.util.concurrent.Flow.Subscriber
  • java.util.concurrent.Flow.S מנוי
  • java.util.concurrent.Flow.Processor (הפועל גם כמפרסם וגם כמנוי).

פרויקט פאזל בג'אווה 9

המטרה העיקרית של פרויקט זה היא להציג את הרעיון של מודולריות תמיכה ליצירת מודולים ב- Java 9 ואז להחיל אותו על ה- JDK זה, לשנות את ה- JDK .

חלק מה- יתרונות שֶׁל מודולריות הם כדלקמן:

  • אנקפסולציה חזקה : המודולים יכולים לגשת רק לחלקי המודול שהועמדו לרשות השימוש. לכן, המחלקות הציבוריות בחבילה אינן ציבוריות אלא אם כן החבילה מיוצאת במפורש בקובץ המידע של המודול.
  • נקה תלות : על המודולים להכריז באילו מודולים אחרים הם ישתמשו באמצעות סעיף הדרישות.
  • שילוב של מודולים ליצירת זמן ריצה קטן יותר, שניתן לשנותו בקלות למכשירי מחשוב קטנים יותר.
  • אָמִין : יישומים אמינים יותר על ידי ביטול זמן ריצה שגיאות . דוגמא:- אתה בטח חווה את היישום שלך נכשל במהלך זמן הריצה בגלל שיעורים חסרים, וכתוצאה מכך ClassNotFoundException .

יש שונים JEPs , שהם חלק מפרויקט זה, כדלקמן:

  • JEP 200 - JDK מודולרי : זה חל על מערכת המודולים של פלטפורמת Java כדי לשנות את ה- JDK לקבוצת מודולים שניתן לשלב בזמן הידור, זמן בנייה או זמן ריצה.
  • JEP 201 - קוד מקור מודולרי : זה מווסת את קוד המקור של JDK למודולים ומשפר את כלי הבנייה להרכבת המודולים.
  • JEP 220 - תמונות זמן ריצה מודולריות : זה מבנה מחדש את תמונות זמן הריצה של JDK ו- JRE כך שיתאימו למודולים וכדי לשפר ביצועים, אבטחה ותחזוקה.
  • JEP 260 - עוטף את מרבית ה- API הפנימי : זה מאפשר לגשת להרבה ממשקי API פנימיים ישירות או באמצעות השתקפות. גישה לממשקי API פנימיים שאמורים להשתנות היא מסוכנת למדי. כדי למנוע את השימוש בו, הם נכללים במודולים ורק אותם ממשקי API פנימיים שנמצאים בשימוש נרחב זמינים עד שממשק API תקין במקומו.
  • JEP 261 - מערכת מודולים : פעולה זו מיישמת את מפרט Java למערכת המודולים על ידי שינוי שפת התכנות של Java, JVM וממשקי API סטנדרטיים אחרים
  • JEP 282: jlink, מקשר Java : זה מאפשר מודולי אריזה ותלותיהם לזמני ריצה קטנים יותר.

אז זה הכל היה על Java 9 ותכונות חדשות של Java 9.

כעת לאחר שהבנתם את התכונות של Java 9, בדקו את מאת אדוריקה, חברת למידה מקוונת מהימנה עם רשת של יותר מ -250,000 לומדים מרוצים הפרוסים ברחבי העולם.

ז שאלה בשבילנו? אנא הזכיר זאת בפרק ההערות בבלוג 'Java 9' זה ונחזור אליך בהקדם האפשרי.