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

תוכן שנמחק תוכן שנוסף
Yonidebot (שיחה | תרומות)
מ בוט החלפות: {{כ}};
Matanyabot (שיחה | תרומות)
מ בוט: מתקן הפניות
שורה 2:
'''Java Virtual Machine''' (בקיצור '''JVM''') היא [[מכונה וירטואלית]] המפרשת ומריצה [[Java Bytecode]]. לרוב, קוד זה מופק על ידי [[מהדר]] ל[[שפת תכנות|שפת]] [[Java]], אם כי ה-JVM יכולה לשמש גם כפלטפורמת היעד של מהדרים לשפות אחרות. ה-JVM היא [[תוכנה|תוכנת]] מחשב ככל תוכנה אחרת, והיא משמשת כמעין שכבת-מיפוי בין [[מערכת הפעלה|מערכת ההפעלה]] לבין תוכניות הרצות על גביה.
 
בגרסאות המוקדמות של שפת Java, הייתה זו חברת [[סאן מיקרוסיסטמס|Sun]] שפיתחה את ה-JVM. בהמשך, ולאחר ש[http://java.sun.com/docs/books/vmspec מפרט ה-JVM] הוגדר במדויק, חברות רבות יישמו גרסאות משלהן, אך כולן חייבות לעמוד בסדרת מבדקים ([[Java TCK]]) כדי להחשב כמימוש תקני של ה-{{כ}}JVM{{כ}}<ref>על רקע זה התחולל מאבק עסקי חריף בין חברת [[סאן מיקרוסיסטמס|Sun]], המפתחת המקורית של שפת Java, ובין חברת [[מיקרוסופט]]. חברת Sun טענה שהגרסה של מיקרוסופט ל-JVM אינה תואמת את המפרט כפי שהוגדר על ידי Sun, וטענה זו התקבלה על ידי בית המשפט. בעקבות זאת, הפסיקה מיקרוסופט לשלב את הגרסה שלה בדפדפן ובמערכות ההפעלה שלה, ומשתמשיהם נדרשים להוריד את התמיכה בשפה מאתר האינטרנט של Sun או מחלופות אחרות.</ref>. בנובמבר [[2006]], הכריזה חברת Sun כי ה-[[Java Platform]], לרבות ה-JVM של Sun (הנקראת [[HotSpot]]), יוצעו גם תחת רישוי [[GPLהרישיון הציבורי הכללי של גנו|GPL v2]]. החברה הודיעה כי תמשיך להשתמש בסימן הרשום של Java (הנמצא בבעלותה) כדי להסמיך מימושים של ה-JVM התואמים באופן מלא למפרט המפורסם.
 
השימוש במכונה וירטואלית הוא ממאפייני היסוד של פלטפורמת Java, והוא מאפשר ל[[תוכנית מחשב|תוכניות]] שנכתבו בשפת Java ועברו [[מהדר|הידור]] באמצעות ה[[מהדר]] של השפה, לרוץ על מגוון רחב של פלטפורמות [[חומרה]] ו[[מערכת הפעלה|מערכות הפעלה]]. תכונה זו באה לידי ביטוי בסיסמתה של {{כ}}Java:{{כ}} "Write once, run anywhere" ("כתוב פעם אחת, הרץ בכל מקום"), אם כי ל-Java תכונה חזקה יותר של רב-פלטפורמיות: "הדר פעם אחת, הרץ בכל מקום". בזכות תכונות אלה, במשולב עם השירותים הרבים שמספקת שפת Java, יש המסווגים את ה-JVM גם כ[[תווכה]].
 
החל מ-[[JSEJava#Java_SE|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."}}
 
==סביבת הריצה==
שורה 32:
ה-JVM מאמתת את ה-Bytecode קודם להרצתו. כלומר, רק סדרות תקינות של הוראות Bytecode יוכלו לרוץ. לדוגמה, הוראת JUMP (הסתעפות) יכולה לכוון רק להוראה הנמצאת באותה הפונקציה. לשימוש במאמת יש תופעת לוואי מבורכת: למרות שה-JVM מבוססת על ארכיקטורה של מחסנית, אין פגיעה בביצועים גם כאשר נעשה שימוש בהידור JIT על גבי פלטפורמות חומרה בארכיטקטורת רגיסטרים<ref>http://db.usenix.org/events/vee05/full_papers/p153-yunhe.pdf</ref>.
 
נוסף על כך, אימות הקוד מבטיח גם שלא יהיה ניתן להשתמש בתבניות [[ביטסיבית|ביטים]] שרירותיות ככתובות זיכרון. בשיטה זו, אין צורך להשתמש ב-[[יחידת ניהול זיכרון|MMU]] כדי להגן על הזיכון בפני השחתה שרירותית. מכאן, שה-JVM מאפשרת יישום יעיל של [[זיכרון מוגן]] בפלטפורמות חומרה החסרות MMU.
 
===אבטחה===
הארכיטקטורה של מכונה וירטואלית מאפשרת פיקוח הדוק על הפעולות שקוד תוכנית מורשה לבצע. ב-Java Virtual Machine נעשה שימוש בתכונה זו כדי לאפשר את הרצתו של קוד לא-בטוח הנטען מרחוק לתוך ה-JVM. יישום נפוץ של תכונה זו מתבצע באמצעות [[יישומון|Applet]] הנטען ל-JVM בפרוטוקול [[Hypertext Transfer Protocol|HTTP]] מאתר מרוחק, ומשולב ב[[דפדפן]]. ה-Applet רץ ב[[ארגז חול (אבטחה)|ארגז חול]] המונע מהיישום להזיק למחשבו של המשתמש. מפרסם הקוד יכול [[חתימה דיגיטלית|לחתום דיגטילית]] על ה-Applet ובכך לאפשר לו, לאחר אישור המשתמש, לגשת למשאבים מקומיים במחשב, כגון [[מערכת קבצים|מערכת הקבצים]].
 
===ניהול זיכרון ממוכן===
אחד מהמנגנונים המרכזיים שמספקת ה-JVM הוא [[איסוף זבל|ניהול זיכרון ממוכן]] (ידוע גם בשם "איסוף זבל"). מנגנון זה אחראי לרשום ולאתר במרחב הזיכרון שהוקצה לתוכנה אובייקטים שאינם בשימוש, ולתבוע בחזרה את המקום שתפסו. הניהול הממוכן של הזיכרון מקל באופן משמעותי על ה[[תכנות מחשבים|תכנות]] בשפת Java ומגביר מאוד את אמינות היישומים.
 
==תוכנית Hello World==