הבדלים בין גרסאות בדף "מכונה וירטואלית"

מ
תיקונים מינוריים
("במחשבים מרכזיים ובשרתים" - מחיקת טקסט כפול)
מ (תיקונים מינוריים)
הדרך שבה מתגברות מכונות וירטואליות על בעיית הפורטביליות היא על ידי כך שהתוכנית מהודרת לשפת ביניים, במקום לשפת מכונה. בזמן ריצה, המכונה הווירטואלית נכנסת לפעולה, ומתרגמת את שפת הביניים לשפת מכונה, בהתאם למחשב ולמערכת ההפעלה המותקנת עליו. כלומר, אם תוכניתן כתב תוכנית ב-Java, בעת ההידור התוכנית תתורגם לשפת ביניים, שאותה מסוגלת המכונה הווירטואלית של Java להבין בלי תלות במחשב ובמערכת ההפעלה עליה היא מותקנת. בעת הרצת התוכנה, המכונה הווירטואלית תתרגם את התוכנית לשפה שהמחשב עליו היא רצה מבין. לפיכך ניתן להעביר תכניות מהודרות בין מחשבים שונים ולקבל אותה תוצאה בסיום הריצה. המכונה הווירטואלית תבטיח שהתוכנית תתבצע כראוי על כל אחד משני המחשבים.
 
מכונה וירטואליותוירטואלית, לפיכך, היא [[תוכנית מחשב]], המקבלת כקלט הוראות הכתובות בשפת ביניים, מתרגמת אותן לשפת מכונה ומריצה אותן. להבדיל ממהדר, אשר מתרגם את התוכנית כולה בטרם ניתן יהיה להריץ אותה, המכונה הווירטואלית מבצעת את התרגום תוך כדי ההרצה עצמה, בדומה ל[[מפרש (תוכנה)|מפרש]]. חשוב להדגיש כי המכונה הווירטואלי לא מתרגמת שפה עילית לשפת ביניים. שלב זה מבוצע על ידי המהדר בשלב הידור התוכנית.
 
[[Java]] היא דוגמה בולטת ל[[שפת תכנות]] המתבססת על מכונה וירטואלית. [[תוכנית מחשב]] שנכתבה בשפת Java [[מהדר|מהודרת]] לא ל[[שפת מכונה]], שנועדה מטבעה לחומרה מסוימת, אלא ל- BYTE CODE[[bytecode]] המתבצע על-גבי מכונה וירטואלית - (Java Virtual Machine ([[JVM]]. זו התכונה המאפשרת לתוכנית Java לרוץ על כל מערכות הפעלה בעלת JVM, מטלפונים סלולרים, ועד למחשבי על. כך לדוגמה, [[יישומון]] Java המשולב בדף [[HTML]] יכול להתבצע ב[[מערכת הפעלה|מערכות ההפעלה]] [[Windows]], [[Mac OS]], [[גנו/לינוקס|לינוקס]] ואחרות, ללא כל צורך בהתאמה ספציפית לאחת ממערכות ההפעלה, משום שבכל אחת ממערכות ההפעלה רץ היישומון על המכונה הווירטואלית JVM.
 
ארכיטקטורת [[NET.]] של [[מיקרוסופט]] מכילה אף היא רכיב החוצץ בין התוכנית המתבצעת לבין מערכת ההפעלה, המכונה Common Language Runtime (בקיצור CLR), ושפתו נקראת Common Intermediate Language (בקיצור CIL, "שפת ביניים משותפת"). רכיב זה מהווה למעשה מכונה וירטואלית, המפרידה בין החומרה לתוכנה. רכיב זה מאפשר לפתח בשפות שונות, כל עוד השפה מהודרת לקובץ היכול לרוץ על ה־CLR.
 
===יתרונות וחסרונות===
ניידות הינה אחת מהבעיות הקשות עימן מתמודד עולם המחשוב כיום. מדי שנה מוצאיםמוציאים סכומים ניכרים על מנת להתמודד עימה. מכונה וירטואלית, מבחינה זו, פותרת בעיה זו. גם אם יומצא מחשב חדש אין צורך להדר את התוכנית מחדש. יש לכתוב מכונה וירטואלית עבור אותו מחשב, ומרגע זה הוא יוכל להריץ את כל התוכניות שהודרו למכונה וירטואלית מסוג זה.
 
יחד עם זאת, תכניות המורצות על ידי מכונה וירטואלית איטיות יותר, וזאת בשל הצורך לתרגם את התוכנית לשפת מכונה בכל הרצה.
על אף התקדמות רבה בשנים האחרונות, תכניות שאמורות לפעול בזמן אמת עדיין מתורגמות לשפת מחשב על מנת לשפר את ביצועיהן. אמנם ברבות מהשפות המבוססות על מכונה וירטואלית ניתן להדר את התוכנית ישירות לשפת מכונה (ולא לשפת ביניים), אך בכך אובדת תכונת הניידות של השפה, החשובה מאד. על אף האמור, הקצאת זיכרון, לדוגמה, מתבצעת מהר יותר באמצעות מכונה וירטואלית.
 
בנוסף, מאחר שרוב התכניות והספריותוה[[ספרייה (תוכנה)|ספריות]] (DLL) הקיימות היום מתורגמות כבר לשפת מחשב, שילובן בשפה המבוססת על מכונה וירטואלית חיונית, אך אינה דבר פשוט כלל ועיקר וקיימים מנגנונים מסובכים על מנת להתמודד עם בעיה זו.
 
==ראו גם==