מהו ה- JVM? הכירו את המכונה הווירטואלית של Java

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

למה משמש ה- JVM

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

JavaWorld /

הגדרה טכנית ל- JVM שימושית ויש גם דרך יומיומית שמפתחי תוכנה חושבים עליה. בואו נשבור את אלה:

  • הגדרה טכנית : ה- JVM הוא המפרט של תוכנה שמבצעת קוד ומספקת את סביבת זמן הריצה עבור אותו קוד.
  • הגדרה יומיומית : ה- JVM הוא הדרך בה אנו מריצים את תוכניות הג'אווה שלנו. אנו מגדירים את הגדרות ה- JVM ואז מסתמכים עליה לניהול משאבי התוכנית במהלך הביצוע.

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

מי מפתח ומתחזק את ה- JVM?

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

ניהול זיכרון ב- JVM

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

איסוף זבל

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

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

מה הפירוש של 'קרוב למתכת'?

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

ה- JVM בשלושה חלקים

ניתן לומר שיש שלושה היבטים ל- JVM: מפרט, יישום ומופע. בואו ניקח בחשבון כל אחד מאלה.

1. מפרט JVM

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

"כדי להטמיע נכון את המכונה הווירטואלית של Java, עליך לקרוא רק את classפורמט הקובץ ולבצע כהלכה את הפעולות המפורטות בו."

JS באך תיאר פעם את יצירת המוסיקה באופן דומה:

"כל שעליך לעשות הוא לגעת במקש הנכון בזמן הנכון."

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

ה- JVM כמכונה וירטואלית

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

2. יישומי JVM

יישום מפרט ה- JVM מביא לתוכנה ממשית, שהיא יישום JVM. למעשה, קיימות יישומי JVM רבים, הן קוד פתוח והן קנייני. ה- HotVot JVM של OpenJDK הוא הטמעת הייחוס, ונשאר אחד מבסיסי הקוד המנוסחים ביותר בעולם. HotSpot הוא גם ה- JVM הנפוץ ביותר.

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

3. מופע JVM

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

לרוב, כאשר מפתחים מדברים על "ה- JVM", אנו מתייחסים למופע JVM הפועל בסביבת פיתוח תוכנה או ייצור. אתה יכול לומר, "היי אנאנד, כמה זיכרון ה- JVM בשרת הזה משתמש?" או, "אני לא מאמין שיצרתי שיחה מעגלית ושגיאת הצפת מחסנית קרסה את ה- JVM שלי. איזו טעות מתחילה!"

מהו מפרט תוכנה?

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

טוען ומבצע קבצי כיתה ב- JVM

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

מטעין המחלקה Java ב- JVM

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

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

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

מנוע הביצוע ב- JVM

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

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

איך מנוע הביצוע מנהל משאבי מערכת

ניתן לחלק את משאבי המערכת לשתי קטגוריות רחבות: זיכרון וכל השאר.

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

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

התפתחות JVM: עבר, הווה, עתיד

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

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

הכל על ה- JVM

  • מתמודדי Java: התנהגות שרשור ב- JVM
  • מתמודדי Java: עומס יתר על השיטה ב- JVM
  • בתוך אופטימיזציה של ביצועי JVM
  • יסודות Bytecode: כיצד JVM מטפל בקוד bytecode
  • חריגים בג'אווה: כיצד JVM מטפל בחריגים
  • הכירו את המכונה הווירטואלית הרזה והממוצעת של Java

סיפור זה, "מהו ה- JVM? הצגת המכונה הווירטואלית של ג'אווה" פורסם במקור על ידי JavaWorld.