לדלג לתוכן

Java Virtual Machine – הבדלי גרסאות

מתוך ויקיפדיה, האנציקלופדיה החופשית
תוכן שנמחק תוכן שנוסף
הוספת תבנית Java
Matanyabot (שיחה | תרומות)
מ בוט: שינויים קוסמטיים
שורה 1: שורה 1:
[[תמונה:Java_Logo.svg.png|130px|שמאל|סמליל שפת Java]]
[[קובץ:Java_Logo.svg.png|130px|שמאל|סמליל שפת Java]]
'''Java Virtual Machine''' (בקיצור '''JVM''') היא [[מכונה וירטואלית]] המפרשת ומריצה [[Java Bytecode]]. לרוב, קוד זה מופק על ידי [[מהדר]] ל[[שפת תכנות|שפת]] [[Java]], אם כי ה-JVM יכולה לשמש גם כפלטפורמת היעד של מהדרים לשפות אחרות. ה-JVM היא [[תוכנה|תוכנת]] מחשב ככל תוכנה אחרת, והיא משמשת כמעין שכבת-מיפוי בין [[מערכת הפעלה|מערכת ההפעלה]] לבין תוכניות הרצות על גביה.
'''Java Virtual Machine''' (בקיצור '''JVM''') היא [[מכונה וירטואלית]] המפרשת ומריצה [[Java Bytecode]]. לרוב, קוד זה מופק על ידי [[מהדר]] ל[[שפת תכנות|שפת]] [[Java]], אם כי ה-JVM יכולה לשמש גם כפלטפורמת היעד של מהדרים לשפות אחרות. ה-JVM היא [[תוכנה|תוכנת]] מחשב ככל תוכנה אחרת, והיא משמשת כמעין שכבת-מיפוי בין [[מערכת הפעלה|מערכת ההפעלה]] לבין תוכניות הרצות על גביה.


שורה 6: שורה 6:
השימוש במכונה וירטואלית הוא ממאפייני היסוד של פלטפורמת Java, והוא מאפשר ל[[תוכנית מחשב|תוכניות]] שנכתבו בשפת Java ועברו [[הידור]] באמצעות ה[[מהדר]] של השפה, לרוץ על מגוון רחב של פלטפורמות [[חומרה]] ו[[מערכת הפעלה|מערכות הפעלה]]. תכונה זו באה לידי ביטוי בסיסמתה של {{כ}}Java:{{כ}} "Write once, run anywhere" ("כתוב פעם אחת, הרץ בכל מקום"), אם כי ל-Java תכונה חזקה יותר של רב-פלטפורמיות: "הדר פעם אחת, הרץ בכל מקום". בזכות תכונות אלה, במשולב עם השירותים הרבים שמספקת שפת Java, יש המסווגים את ה-JVM גם כ[[תווכה]].
השימוש במכונה וירטואלית הוא ממאפייני היסוד של פלטפורמת Java, והוא מאפשר ל[[תוכנית מחשב|תוכניות]] שנכתבו בשפת Java ועברו [[הידור]] באמצעות ה[[מהדר]] של השפה, לרוץ על מגוון רחב של פלטפורמות [[חומרה]] ו[[מערכת הפעלה|מערכות הפעלה]]. תכונה זו באה לידי ביטוי בסיסמתה של {{כ}}Java:{{כ}} "Write once, run anywhere" ("כתוב פעם אחת, הרץ בכל מקום"), אם כי ל-Java תכונה חזקה יותר של רב-פלטפורמיות: "הדר פעם אחת, הרץ בכל מקום". בזכות תכונות אלה, במשולב עם השירותים הרבים שמספקת שפת Java, יש המסווגים את ה-JVM גם כ[[תווכה]].


החל מ-[[JSE|Java SE 5.0]], שינויים במפרט ה-JVM מפותחים תחת ה-[[Java Community Process]] כ-{{כ}}JSR 924{{כ}}<ref>[http://www.jcp.org/en/jsr/detail?id=924 JSR 924] &ndash; Specifies changes to the JVM specification starting with J2SE 5.0</ref>. מפרט ה-JVM מפורסם כספר<ref>''[http://java.sun.com/docs/books/vmspec/ The Java Virtual Machine Specification]'' &lrm;(the [http://java.sun.com/docs/books/vmspec/html/VMSpecTOC.doc.html first] and [http://java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html second] editions are also available online)&lrm;</ref> הידוע בשם "Blue Book", ובמבוא מצוין כך (תרגום): {{ציטוט|תוכן="בכוונתו שמפרט זה של ה-Java Virtual Machine יהיה מתועד מספיק ליישום בשיטת "[[חדר נקי (הנדסת תוכנה)|חדר נקי]]". חברת Sun מספקת מבדקים המוודאים את הפעולה התקינה של מימושי Java Virtual Machine."}}
החל מ-[[JSE|Java SE 5.0]], שינויים במפרט ה-JVM מפותחים תחת ה-[[Java Community Process]] כ-{{כ}}JSR 924{{כ}}<ref>[http://www.jcp.org/en/jsr/detail?id=924 JSR 924] – Specifies changes to the JVM specification starting with J2SE 5.0</ref>. מפרט ה-JVM מפורסם כספר<ref>''[http://java.sun.com/docs/books/vmspec/ The Java Virtual Machine Specification]'' ‎(the [http://java.sun.com/docs/books/vmspec/html/VMSpecTOC.doc.html first] and [http://java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html second] editions are also available online)‎</ref> הידוע בשם "Blue Book", ובמבוא מצוין כך (תרגום): {{ציטוט|תוכן="בכוונתו שמפרט זה של ה-Java Virtual Machine יהיה מתועד מספיק ליישום בשיטת "[[חדר נקי (הנדסת תוכנה)|חדר נקי]]". חברת Sun מספקת מבדקים המוודאים את הפעולה התקינה של מימושי Java Virtual Machine."}}


==סביבת הריצה==
== סביבת הריצה ==
תוכניות המיועדות לרוץ על גבי JVM מהודרות תחילה ל-[[Java Bytecode]], שהוא [[סט פקודות|סט פקודות המכונה]] של ה-JVM. פלט המהדר נשמר בפורמט בינארי מתוקנן, שבדרך כלל מסופק כקובץ &lrm;[[Class|.class]]&lrm;. כל [[מחלקה (תכנות)|מחלקה]] בתוכנית מהודרת לקובץ &lrm;.class&lrm; אחד, ובמקרים מסוימים אף ליותר ([[מחלקה פנימית (תכנות)|מחלקות פנימיות]]). תוכנית תכלול בדרך כלל קובצי &lrm;.class&lrm; רבים. כדי להקל על הפצת התוכנית, ניתן לארוז את הקבצים בקובץ &lrm;[[JAR|.jar]]&lrm;.
תוכניות המיועדות לרוץ על גבי JVM מהודרות תחילה ל-[[Java Bytecode]], שהוא [[סט פקודות|סט פקודות המכונה]] של ה-JVM. פלט המהדר נשמר בפורמט בינארי מתוקנן, שבדרך כלל מסופק כקובץ ‎[[Class|.class]]‎. כל [[מחלקה (תכנות)|מחלקה]] בתוכנית מהודרת לקובץ ‎.class‎ אחד, ובמקרים מסוימים אף ליותר ([[מחלקה פנימית (תכנות)|מחלקות פנימיות]]). תוכנית תכלול בדרך כלל קובצי ‎.class‎ רבים. כדי להקל על הפצת התוכנית, ניתן לארוז את הקבצים בקובץ ‎[[JAR|.jar]]‎.


קבצים אלה משמשים כ[[קלט]] ל-JVM, ורצים על גביה. בזמן הריצה, ה-JVM [[מפרש (תוכנה)|מפרשת]] או מהדרת במקום (באמצעות [[מהדר Just-in-Time|מהדר JIT]]) את הקלט לסט הפקודות המתאים של ה[[מעבד]] עליו רצה בפועל ה-JVM. ברוב המימושים המודרניים של ה-JVM, נעשה שימוש נרחב בהידור במקום כדי להאיץ את מהירות הריצה של התוכנית.
קבצים אלה משמשים כ[[קלט]] ל-JVM, ורצים על גביה. בזמן הריצה, ה-JVM [[מפרש (תוכנה)|מפרשת]] או מהדרת במקום (באמצעות [[מהדר Just-in-Time|מהדר JIT]]) את הקלט לסט הפקודות המתאים של ה[[מעבד]] עליו רצה בפועל ה-JVM. ברוב המימושים המודרניים של ה-JVM, נעשה שימוש נרחב בהידור במקום כדי להאיץ את מהירות הריצה של התוכנית.
שורה 15: שורה 15:
ה-Java Virtual Machine מבוססת על ארכיטקטורה של [[מכונת מחסנית]]. מאידך, מהדרי JIT מהדרים לרוב את ה-Bytecode ל[[שפת מכונה]] מבוססת [[אוגר (מחשבים)|רגיסטרים]]. לכל [[תהליכון]] (Thread) יש מחסנית ואוגר פקודה משלו.
ה-Java Virtual Machine מבוססת על ארכיטקטורה של [[מכונת מחסנית]]. מאידך, מהדרי JIT מהדרים לרוב את ה-Bytecode ל[[שפת מכונה]] מבוססת [[אוגר (מחשבים)|רגיסטרים]]. לכל [[תהליכון]] (Thread) יש מחסנית ואוגר פקודה משלו.


===סט הפקודות===
=== סט הפקודות ===
ל-JVM יש פקודות לקבוצות המשימות הבאות:
ל-JVM יש פקודות לקבוצות המשימות הבאות:
* טעינה ואחסנה
* טעינה ואחסנה
שורה 29: שורה 29:
פקודות ה-JVM, דהיינו, שפת המכונה שלה, מפורשות באותו האופן בכל פלטפורמת החומרה. עם זאת, בכל פלטפורמה נדרש מיפוי שונה של פקודות אלה לפקודות ה[[מעבד]] הרלוונטי, ומשימה זו מוטלת על מיישמי ה-JVM בפלטפורמה. בנוסף, ה-JVM נדרשת למפות באופן יעיל את ליבת [[ממשק תכנות יישומים|ממשק תכנות היישומים]] של Java לממשק תכנות היישומים המתאים במערכת ההפעלה.
פקודות ה-JVM, דהיינו, שפת המכונה שלה, מפורשות באותו האופן בכל פלטפורמת החומרה. עם זאת, בכל פלטפורמה נדרש מיפוי שונה של פקודות אלה לפקודות ה[[מעבד]] הרלוונטי, ומשימה זו מוטלת על מיישמי ה-JVM בפלטפורמה. בנוסף, ה-JVM נדרשת למפות באופן יעיל את ליבת [[ממשק תכנות יישומים|ממשק תכנות היישומים]] של Java לממשק תכנות היישומים המתאים במערכת ההפעלה.


===אימות===
=== אימות ===
ה-JVM מאמתת את ה-Bytecode קודם להרצתו. כלומר, רק סדרות תקינות של הוראות Bytecode יוכלו לרוץ. לדוגמה, הוראת JUMP (הסתעפות) יכולה לכוון רק להוראה הנמצאת באותה הפונקציה. לשימוש במאמת יש תופעת לוואי מבורכת: למרות שה-JVM מבוססת על ארכיקטורה של מחסנית, אין פגיעה בביצועים גם כאשר נעשה שימוש בהידור JIT על גבי פלטפורמות חומרה בארכיטקטורת רגיסטרים<ref>http://db.usenix.org/events/vee05/full_papers/p153-yunhe.pdf</ref>.
ה-JVM מאמתת את ה-Bytecode קודם להרצתו. כלומר, רק סדרות תקינות של הוראות Bytecode יוכלו לרוץ. לדוגמה, הוראת JUMP (הסתעפות) יכולה לכוון רק להוראה הנמצאת באותה הפונקציה. לשימוש במאמת יש תופעת לוואי מבורכת: למרות שה-JVM מבוססת על ארכיקטורה של מחסנית, אין פגיעה בביצועים גם כאשר נעשה שימוש בהידור JIT על גבי פלטפורמות חומרה בארכיטקטורת רגיסטרים<ref>http://db.usenix.org/events/vee05/full_papers/p153-yunhe.pdf</ref>.


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


===אבטחה===
=== אבטחה ===
הארכיטקטורה של מכונה וירטואלית מאפשרת פיקוח הדוק על הפעולות שקוד תוכנית מורשה לבצע. ב-Java Virtual Machine נעשה שימוש בתכונה זו כדי לאפשר את הרצתו של קוד לא-בטוח הנטען מרחוק לתוך ה-JVM. יישום נפוץ של תכונה זו מתבצע באמצעות [[Applet]] הנטען ל-JVM בפרוטוקול [[HTTP]] מאתר מרוחק, ומשולב ב[[דפדפן]]. ה-Applet רץ ב[[ארגז חול (אבטחה)|ארגז חול]] המונע מהיישום להזיק למחשבו של המשתמש. מפרסם הקוד יכול [[חתימה דיגיטלית|לחתום דיגטילית]] על ה-Applet ובכך לאפשר לו, לאחר אישור המשתמש, לגשת למשאבים מקומיים במחשב, כגון [[מערכת קבצים|מערכת הקבצים]].
הארכיטקטורה של מכונה וירטואלית מאפשרת פיקוח הדוק על הפעולות שקוד תוכנית מורשה לבצע. ב-Java Virtual Machine נעשה שימוש בתכונה זו כדי לאפשר את הרצתו של קוד לא-בטוח הנטען מרחוק לתוך ה-JVM. יישום נפוץ של תכונה זו מתבצע באמצעות [[Applet]] הנטען ל-JVM בפרוטוקול [[HTTP]] מאתר מרוחק, ומשולב ב[[דפדפן]]. ה-Applet רץ ב[[ארגז חול (אבטחה)|ארגז חול]] המונע מהיישום להזיק למחשבו של המשתמש. מפרסם הקוד יכול [[חתימה דיגיטלית|לחתום דיגטילית]] על ה-Applet ובכך לאפשר לו, לאחר אישור המשתמש, לגשת למשאבים מקומיים במחשב, כגון [[מערכת קבצים|מערכת הקבצים]].


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


==תוכנית Hello World==
== תוכנית Hello World ==
להלן ה-Bytecode של תוכנית פשוטה ב-Java המדפיסה &lrm;"Hello Wikipedia World!"&lrm;.
להלן ה-Bytecode של תוכנית פשוטה ב-Java המדפיסה ‎"Hello Wikipedia World!"‎.
<div dir="ltr"><source lang="java">
<div dir="ltr"><source lang="java">
public class HelloWorld {
public class HelloWorld {
שורה 71: שורה 71:
</source></div>
</source></div>


==ראו גם==
== ראו גם ==
* [[Common Language Runtime]]
* [[Common Language Runtime]]
* [[מהדר Just-in-Time]]
* [[מהדר Just-in-Time]]


==קישורים חיצוניים==
== קישורים חיצוניים ==
* [http://www.robert-tolksdorf.de/vmlanguages.html רשימת שפות] המהודרות ל-JVM
* [http://www.robert-tolksdorf.de/vmlanguages.html רשימת שפות] המהודרות ל-JVM
* [http://www.kaffe.org/ Kaffe.org - the Kaffe project]
* [http://www.kaffe.org/ Kaffe.org - the Kaffe project]
שורה 84: שורה 84:
* [http://java.com/en/download/help/testvm.xml Test your Java Virtual Machine]
* [http://java.com/en/download/help/testvm.xml Test your Java Virtual Machine]


==הערות שוליים==
== הערות שוליים ==
<references/>
<references/>
⚫
{{Java}}


[[קטגוריה:Java]]
[[קטגוריה:Java]]
[[קטגוריה:תוכנה]]
[[קטגוריה:תוכנה]]
[[קטגוריה:מכונות וירטואליות]]
[[קטגוריה:מכונות וירטואליות]]

⚫
{{Java}}


[[en:Java virtual machine]]
[[en:Java virtual machine]]

גרסה מ־01:04, 26 בינואר 2012

סמליל שפת Java
סמליל שפת Java

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

בגרסאות המוקדמות של שפת Java, הייתה זו חברת Sun שפיתחה את ה-JVM. בהמשך, ולאחר שמפרט ה-JVM הוגדר במדויק, חברות רבות יישמו גרסאות משלהן, אך כולן חייבות לעמוד בסדרת מבדקים (Java TCK) כדי להחשב כמימוש תקני של ה-‏JVM‏[1]. בנובמבר 2006, הכריזה חברת Sun כי ה-Java Platform, לרבות ה-JVM של Sun (הנקראת HotSpot), יוצעו גם תחת רישוי GPL v2. החברה הודיעה כי תמשיך להשתמש בסימן הרשום של Java (הנמצא בבעלותה) כדי להסמיך מימושים של ה-JVM התואמים באופן מלא למפרט המפורסם.

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

החל מ-Java SE 5.0, שינויים במפרט ה-JVM מפותחים תחת ה-Java Community Process כ-‏JSR 924‏[2]. מפרט ה-JVM מפורסם כספר[3] הידוע בשם "Blue Book", ובמבוא מצוין כך (תרגום):

"בכוונתו שמפרט זה של ה-Java Virtual Machine יהיה מתועד מספיק ליישום בשיטת "חדר נקי". חברת Sun מספקת מבדקים המוודאים את הפעולה התקינה של מימושי Java Virtual Machine."

סביבת הריצה

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

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

ה-Java Virtual Machine מבוססת על ארכיטקטורה של מכונת מחסנית. מאידך, מהדרי JIT מהדרים לרוב את ה-Bytecode לשפת מכונה מבוססת רגיסטרים. לכל תהליכון (Thread) יש מחסנית ואוגר פקודה משלו.

סט הפקודות

ל-JVM יש פקודות לקבוצות המשימות הבאות:

  • טעינה ואחסנה
  • ארמתמטיקה
  • המרת טיפוסים
  • יצירה, תפעול ותמרון של אובייקטים
  • ניהול מחסנית (push/pop)
  • העברת פיקוח (הסתעפות)
  • שפעול מתודות וחזרה
  • טיפול בהחרגות
  • טיפול בריצה מקבילית

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

אימות

ה-JVM מאמתת את ה-Bytecode קודם להרצתו. כלומר, רק סדרות תקינות של הוראות Bytecode יוכלו לרוץ. לדוגמה, הוראת JUMP (הסתעפות) יכולה לכוון רק להוראה הנמצאת באותה הפונקציה. לשימוש במאמת יש תופעת לוואי מבורכת: למרות שה-JVM מבוססת על ארכיקטורה של מחסנית, אין פגיעה בביצועים גם כאשר נעשה שימוש בהידור JIT על גבי פלטפורמות חומרה בארכיטקטורת רגיסטרים[4].

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

אבטחה

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

ניהול זיכרון ממוכן

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

תוכנית Hello World

להלן ה-Bytecode של תוכנית פשוטה ב-Java המדפיסה ‎"Hello Wikipedia World!"‎.

public class HelloWorld {
  public <init>() : void
   L0
    LINENUMBER 2 L0
    ALOAD 0: this
    INVOKESPECIAL Object.<init>() : void
    RETURN
   L1
    LOCALVARIABLE this HelloWorld L0 L1 0
    MAXSTACK = 1
    MAXLOCALS = 1

  public static main(String[]) : void
   L0
    LINENUMBER 5 L0
    GETSTATIC System.out : PrintStream
    LDC "Hello Wikipedia World!"
    INVOKEVIRTUAL PrintStream.println(String) : void
   L1
    LINENUMBER 6 L1
    RETURN
   L2
    LOCALVARIABLE args String[] L0 L2 0
    MAXSTACK = 2
    MAXLOCALS = 1
}

ראו גם

קישורים חיצוניים

הערות שוליים

  1. ↑ על רקע זה התחולל מאבק עסקי חריף בין חברת Sun, המפתחת המקורית של שפת Java, ובין חברת מיקרוסופט. חברת Sun טענה שהגרסה של מיקרוסופט ל-JVM אינה תואמת את המפרט כפי שהוגדר על ידי Sun, וטענה זו התקבלה על ידי בית המשפט. בעקבות זאת, הפסיקה מיקרוסופט לשלב את הגרסה שלה בדפדפן ובמערכות ההפעלה שלה, ומשתמשיהם נדרשים להוריד את התמיכה בשפה מאתר האינטרנט של Sun או מחלופות אחרות.
  2. ↑ JSR 924 – Specifies changes to the JVM specification starting with J2SE 5.0
  3. ↑ The Java Virtual Machine Specification ‎(the first and second editions are also available online)‎
  4. ↑ http://db.usenix.org/events/vee05/full_papers/p153-yunhe.pdf