מה ההבדל בין DVM ל- JVM?

1. הקדמה

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

2. מה זה זמן ריצה?

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

אנו יכולים להבחין בין סוגי מתרגמים אלה:

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

3. Java Virtual Machine

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

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

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

4. מכונה וירטואלית של דלוויק

ה- DVM היא מכונה וירטואלית להפעלת יישומי אנדרואיד. ה- DVM מבצע את ה- byvikecode של Dalvik, שמורכב מתוכניות שנכתבו בשפת Java. שים לב שה- DVM אינו JVM.

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

בשנת 2014, גוגל פרסמה את Android Runtime (ART) לאנדרואיד 5 שהחליף את דלוויק לשיפור השימוש בסוללות בביצועי היישומים. הגרסה האחרונה הייתה 1.6.0 באנדרואיד 4.4.

5. ההבדל בין JVM ל- DVM

5.1. ארכיטקטורה

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

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

5.2. הַהדָרָה

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

במכשיר אנדרואיד, ה- DVM אוסף את קוד Java לפורמט ביניים הנקרא Java bytecode (קובץ .class) כמו JVM. ואז, בעזרת כלי שנקרא Dalvik eXchange או dx, הוא הופך את ה- Java bytecode ל- Dalvik bytecode. סוף כל סוף, ה- DVM מתרגם את קוד הביוט של דלוויק לקוד מכונה בינארי.

שני ה VMs משתמשים במהדר Just-In-Time (JIT). מהדר ה- JIT הוא סוג של מהדר המבצע את האוסף במהלך זמן הריצה.

5.3. ביצועים

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

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

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

5.4. ביצוע

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

עם זאת, אנדרואיד תוכנן להפעלת מספר מופעי DVM. אז כדי להריץ יישום או שירות, ה- מערכת ההפעלה של Android יוצרת מופע DVM חדש עם תהליך נפרד במרחב הזיכרון המשותף ופורסת את הקוד להפעלת היישום.

6. מסקנה

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