מהו ה- JRE? מבוא לסביבת Java Runtime

יחד, ערכת הפיתוח של Java (JDK), המכונה הווירטואלית של Java (JVM) וסביבת Java Runtime (JRE) מהווים טריפקטה חזקה של רכיבי פלטפורמת Java לפיתוח ולהפעלת יישומי Java. הצגתי בעבר את JDK ו- JVM. במדריך מהיר זה תלמד על JRE, שהיא סביבת זמן הריצה של Java.

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

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

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

התקנת JDK, JRE ו- JVM

מנקודת מבט ההתקנה, בכל פעם שתוריד JDK, הוא יכלול JRE תואם גרסה, ו- JRE יכלול JVM ברירת מחדל. ניתן גם להוריד את ה- JRE בנפרד מה- JDK, ותוכלו לבחור מתוך מגוון סוגי JVM. ברירות המחדל עובדות היטב עבור רוב היישומים, במיוחד כשאתה מתחיל עם Java.

מהי סביבת זמן ריצה?

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

WORA עבור Java

כאשר הוצג לראשונה, עקרון "כתוב פעם אחת, לרוץ בכל מקום" של ג'אווה נחשב למהפכני, אך כיום הוא אומץ כנורמה עבור מרבית מערכות התוכנה.

סביבת הריצה של Java

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

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

בקיצור, ה- JRE הוא מעין meta-OS לתוכניות Java. זו דוגמה קלאסית להפשטה , הפשטת מערכת ההפעלה הבסיסית לפלטפורמה עקבית להפעלת יישומי Java.

איך JRE עובד עם JVM

מכונה וירטואלית של Java היא מערכת תוכנה פועלת האחראית על ביצוע תוכניות Java חי. ה- JRE היא מערכת הדיסק שלוקחת את קוד הג'אווה שלך, משלבת אותו עם הספריות הדרושות ומתחילה את ה- JVM לביצועו.

ה- JRE מכיל ספריות ותוכנות שתוכניות Java שלך צריכות להריץ. כדוגמה, מטעין המחלקות Java הוא חלק מסביבת Java Runtime. פיסת תוכנה חשובה זו טוענת את קוד הג'אווה המהודר לזיכרון ומחברת את הקוד לספריות מחלקת Java המתאימות.

בתצוגה השכבתית שתיארתי זה עתה, ה- JVM נוצר על ידי JRE. מנקודת מבט של חבילה, ה- JRE מכיל את ה- JVM, כפי שמראה איור 1.

מתיו טייסון

התקנה ושימוש ב- JRE

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

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

גרסאות JRE

סביבת Java Runtime מעודכנת עבור כל גרסה חדשה של Java, ומספרי הגרסאות שלה מיישרים קו עם מערכת הגירסאות של פלטפורמת Java, כך למשל JRE 1.8 מריץ את Java 8. בעוד שיש לך מגוון חבילות JDK לבחירה (כגון Enterprise Edition או מהדורה רגילה) זה לא המקרה עם ה- JRE. ברוב המחשבים פועל JRE שפותח עבור Java SE, המסוגל להריץ כל יישום Java ללא קשר לאופן בו פותח. מרבית המכשירים הניידים מגיעים עם JRE עבור Java ME, המותקן מראש במכשיר הנייד ואינו זמין להורדה.

לאחר התקנת ה- JRE, באפשרותך לקיים אינטראקציה איתו בשורת הפקודה על ידי הזנה  java -version, שתאמר לך איזו גרסה מותקנת. במערכות POSIX, אתה תמיד יכול לבדוק את המיקום המותקן באמצעות which java.

JRE ב- devops

ה- JRE לא מורגש מאוד בשלב הפיתוח, שם הוא מפעיל בעיקר את התוכניות שלכם במערכת ההפעלה או ב- IDE לבחירתכם. ה- JRE ממלא תפקיד קצת יותר בולט בארגון devops ובניהול מערכות מכיוון שהוא משמש לניטור ותצורה.

ביסודו של דבר, ה- JRE מספק את ה"כפתורים "שתשתמש בהם כדי להגדיר ולשלוט במאפייני יישום Java. שימוש בזיכרון הוא דוגמה מעולה, הלחם והחמאה של ניהול מערכות. השימוש בזיכרון אמנם חשוב תמיד, אך הוא חיוני בתצורות ענן, ו- devops היא טכנולוגיה מבוססת ענן. אם אתה עובד בסביבת devops, או מעוניין להסתעף ב- devops, מומלץ להבין כיצד עובד זיכרון Java וכיצד הוא מנוטר ב- JRE.

Devops או sysadmin?

Devops הוא מונח חדש, אך הוא מתאר משהו שנכון במשך עשרות שנים, והוא יכולת פעולה הדדית בין פיתוח לפעולות. במובן זה, devops הוא רק מונח חדש יותר למה שהיה מכונה בעבר פעולות או ניהול מערכות. כמו sysadmin, היבט חשוב של devops הוא ניהול המערכות הדרושות להפעלת תוכנה. ניהול ה- JRE הוא חלק מניהול מערכות המריצות יישומי Java.

זיכרון Java ו- JRE

זיכרון ג'אווה מורכב משלושה מרכיבים: הערימה, המחסנית והמטא-שטח (שבעבר נקרא פרמגן).

  • Metaspace הוא המקום בו Java שומרת על המידע הבלתי משתנה של התוכנית כמו הגדרות מחלקה.
  • שטח הערימה הוא המקום בו Java שומרת על תוכן משתנה.
  • שטח הערימה הוא המקום בו Java מאחסנת ביצוע פונקציות והפניות משתנות.

ניהול זיכרון ב- Java 8

עד Java 8, metaspace היה ידוע בשם permgen. מלבד היותו שם מגניב בהרבה, מטא-ספייס הוא שינוי משמעותי לאופן האינטראקציה של מפתחים עם שטח הזיכרון של Java. בעבר היית משתמש בפקודה java -XX:MaxPermSizeכדי לפקח על גודל שטח הפרמגן. מג'אווה 8 ואילך, ג'אווה מגדילה באופן אוטומטי את גודל המטה-מרחב כדי להתאים לצרכי המטא של התוכנית שלך. ג'אווה 8 הציגה גם דגל חדש MaxMetaspaceSize, שניתן להשתמש בו להגבלת גודל המרחב.

אפשרויות הזיכרון האחרות, ערימה וערימה, נשארות זהות ב- Java 8.

הגדרת שטח ערימה

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

קביעת תצורה של שטח הערימה

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

אתה משתמש -Xssבמתג כדי להגדיר את גודל ההתחלה של המחסנית. הערימה גדלה באופן דינמי בהתאם לצרכי התוכנית.

ניטור יישומי Java

למרות שמעקב אחר יישומים הוא פונקציה של ה- JVM, ה- JRE מספק אפשרויות תצורה, המהוות בסיס הבסיס הדרוש לניטור. מגוון כלים זמינים לניטור יישומי Java, החל מהקלאסיקה (כמו פקודת יוניקס top) ועד פתרונות פיקוח מרחוק מתוחכמים כמו ניטור התשתיות של אורקל.

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

סיכום

סביבת הריצה של ג'אווה (Java Runtime Environment) היא תוכנית הדיסק שמטענת יישומי Java לצורך ביצוע ה- JVM. JRE נכלל כברירת מחדל בעת הורדת ערכת הפיתוח של Java, וכל JRE כולל את ספריות הליבה של Java, מטעין מחלקות Java ומכונה וירטואלית של Java. כדאי להבין כיצד האינטראקציה בין JVM, JDK ו- JRE, במיוחד לעבודה בסביבות ענן ונטישה. בסביבות אלה, ה- JRE לוקח תפקיד חזק יותר בניטור ותצורה מאשר ביחס לפיתוח יישומי Java המסורתיים.

סיפור זה, "מהו JRE? מבוא לסביבת Java Runtime" פורסם במקור על ידי JavaWorld.