מה ההבדל בין מהדר JVM ו- JIT (רק במהדר זמן) ב- Java?


תשובה 1:

ל- JVM ("מכונה Java Virtual") שתי משמעויות:

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

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

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

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


תשובה 2:

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

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

להלן כמה הבדלים נוספים בין JVM ל- JIT בפלטפורמת התכנות Java:

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

2) הבדל נוסף בין JIT ל- JVM הוא זה, JIT הוא חלק מ- JVM. דוגמא אחת ל- JIT היא Hotspot JIT של אורקל שמגיע עם Hotspot JVM. זה נקרא hotpost מכיוון שמהדר ה- Just in time שלו אוסף רק קוד חם לשפת האם, קוד שמבצע 90% מהזמן.

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

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

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


תשובה 3:

ההבדל העיקרי הוא:

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

תודה ודרישת שלום

שוג'את חאן

פרטי התקשרות: [email protected]