הידור והרצה בג'אווה

2

-פרסומת-

קומפילציה ופיענוח

-פרסומת-

בשפת JAVA ההידור (הליך הקומפילציה/ הקימפול- Compiling) מתבצע כרגיל על ידי מהדר. המהדר יכול להיות תוכנת IDE (סביבת תכנות משולבת) איתה כותבים את הקוד וגם מקמפלים אותו, או קובץ הרצה הכלול בשפה כמו javac.exe שמבצע את הליך הקימפול בעצמו (לשם כך יש להריצו עם עם פרמטרים מתאימים).

בשפת ג'אווה, קבצי המקור הם קבצי .java והם מקומפלים לקבצים מסוג .class בשפת byteCode.

-פרסומת-

קבצים מסוג ByteCode שקומפלו על ידי המהדרים של שפת ג'אווה אינם קבצים שנועדו להרצה ישירה (Direct-Execution), כלומר לא נועדו לעבור קריאה ע"י המעבד כפי שהם! בשפת JAVA קימפול לא יוצר קובץ מוכן להרצה, בניגוד לשפות אחרות. יש צורך לפענח קבצים אלה פעם נוספת לשפה בינארית. המפענח (Interpreter) של שפת JAVA נקרא JVM (Java Virtual Machine) והוא למעשה מערכת הפעלה וירטואלית נפרדת הרצה על כל מערכת הפעלה למחשב הקיימת כיום. קובץ .jar הינו קובץ המכיל קבצים לפעולת תוכנית ב-JAVA הכולל קבצים מסוגים רבים כמו .class, קובצי נתונים וקבצי תמונה אשר בשימוש ע"י הפרוייקט. בעת הרצת קובץ .jar או .class מערכת JVM מפענחת את הקובץ לנתונים בינאריים ורושמת אותו לזיכרון מערכת ההפעלה (טעינה לזכרון) לאחר שהיא בדקה קודם לכן שהקובץ אינו מכיל קוד זדוני או exploits (אקפלויטים) שהם.

מה היתרון בשני שלבים אלה?

הקימפול לשפת byteCode עושה חלק ניכר מעבודת ההמרה של הקוד עד רמה מינימלית מסויימת שתואמת את כל הארכיטקטורות (מערכות מחשב של לוח אם ומעבד) שקיימות. שלב הפענוח מתבצע ע"י JVM של מערכת ההפעלה המקומית (אם הותקנה) ומתאים את קוד ה-byteCode לקוד בינארי שתואם את הפלטפורמה, כלומר תואם למחשב מבחינת החומרה שלו (ובפרט למעבד). הודות לכך, קוד שנבנה וקומפל על מערכת הפעלה עם ארכיטקטורה מסויימת יוכל לעבוד ולרוץ על ידי כל פלטפורמה אחרת בעלת גרסת JVM זהה או עדכנית יותר (לכל מערכת הפעלה קיימת JVM  עבורו). כלומר תוכנית שנכתבה בשפת ג'אווה שהיא שפה שיכולה לרוץ על כל הפלטפורמות (Cross-platform Language), תוכל לרוץ על מערכות שונות, זאת למרות שקומפלה במחשב אחר(תוכנית ניידת, תכונת הניידות של שפת ג'אווה- code portability). החסרון מצד שני, באופן יחסי להרצה של קבצי .exe הרצת קבצים של שפת גאווה איטית יותר כי יש לפענח אותם לפני ההרצה, אולם עדיין חלק מן העיבוד בוצע כבר בהליך הקומפילציה.

-פרסומת-

עשוי לעניין אותך
  1. חניתה הגיב

    אפשר בבקשה הסבר על ההבדלים בין שגיאות קומפילציה לשגיאות זמן ריצה?
    איזה טעויות גורמות לאיזה שגיאות.
    במחלקות ובממשקים.
    מדובר בJAVA
    תודה רבה!
    הכל מוסבר מאוד יפה ומתומצת

    1. יוסי לישה הגיב

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

הגב

לא נפרסם את האימייל שלך.

רק לוודא זריז שאתה אנושי *