פרסומת
האם אתה מתלבט כרגע אם להשתמש ב- Java ליישום הבא שלך, או להשתמש בערכות כלים ומסגרות מקוריות? האם תרצה לדעת אילו יתרונות מספק ג'אווה על פני תכנות מקוריות ליישום? המשך לקרוא כדי לגלות!
מהי יישום שפת אם?
יישום מקורי הוא תוכנית שנכתבה במיוחד עבור מערכת הפעלה (OS), ואולי גם עבור החומרה הספציפית שמפעילה מערכת הפעלה זו. זה בעיקר כתוב בשפה כמו C / C ++. קוד המקור C / C ++ נערך לטופס אובייקט באמצעות מהדר, אשר מורכב אז להפעלה על ידי קישור הספריות הנדרשות. תוכנית שנבנית בצורה כזו תפעל על החומרה הספציפית ועל מערכת ההפעלה שהיא מיועדת לה, אך עשויה שלא לעבוד כראוי במערכות אחרות.
מדוע יישומים אינדיבידואליים אינם ניידים?
מהדר לשפה כמו C / C ++ מתרגם הצהרות קוד מקור לשפת מכונה עבור המעבד הממוקד. כשאתה מנסה להריץ קוד זה במעבד אחר, יתכן שהתוכנית לא תעבוד כראוי (או תעבוד בכלל) מכיוון שהוראות שפת המכונה בקוד הידור לא יתמכו במעבד זה.
בנוסף, מערכת ההפעלה החדשה עשויה להיות שונה מזו המקורית ואולי אפילו לא תכיר את קובץ התוכנית כהפעלה. זה נובע מתבניות קבצים שונות המשמשות להפעלה על פני מערכות הפעלה שונות (כגון Windows, Linux, MacOS וכו ').
ניידות היא סוגיה כה גדולה ביישומים מקוריים שרק שדרוג המהדר לגירסה הבאה עשוי להביא לשינויים שבורים. יתכן שיהיה צורך לתקן את הקוד שלך כדי לעבוד עם המהדר החדש יותר. ככזה, מתיז את קוד המקור במה שמכונה ifdef הצהרות לבידוד דרכים לעקיפת הבעיה הספציפיות לחומרה, מערכת הפעלה או מהדר הינן נפוצות.
להלן קטע קוד קטן מ- ספריית דחיסת BZLib המדגים את השימוש ב- ifdefזה כדי לבודד את מוזרויות הפלטפורמה:
#ifdef _WIN32. # כלול # ifdef קטן / * windows.h הגדיר small to char * / # undef קטן. # endif. # ifdef BZ_EXPORT. # הגדירו את BZ_API (func) WINAPI func. # הגדר BZ_EXTERN חיצוני. # else / * ייבא חלונות dll באופן דינמי * / # הגדירו BZ_API (func) (WINAPI * func) # הגדר BZ_EXTERN. # endif. #else. # הגדר פונקציה BZ_API (func). # הגדר BZ_EXTERN חיצוני. #endif.
ניידות קוד מקור במערכות הפעלה
ניתן להקל על מצב זה במידה מסוימת על ידי קומפילציה מחדש של קוד המקור C / C ++ למעבד החדש. עם זאת, מערכת ההפעלה של המעבד החדש עשויה להיות שונה. וייתכן שקוד המקור לא נערך ללא שינויים, בין אם גדולים או מינוריים. אפילו שינויים קלים בגרסאות מערכת ההפעלה עשויים לדרוש שינויים בקוד המקור.
וכשאתה מחשיב מערכות הפעלה שונות כמו Windows ו- Linux / UNIX, הניידות היא משחק כדור חדש לחלוטין. אלא אם כן אתה משתמש בערכת כלים או במסגרת שמבודדת אותך לחלוטין ממערכת ההפעלה, ניידות קוד המקור אינה אפשרית. הסיבה לכך היא שממשק מערכת ההפעלה שונה לחלוטין בין מערכות אלה. אם אתה, בפינות המרוחקות בקוד שלך, משתמש ישירות בפרימיטיביות כלשהן של מערכת ההפעלה, הקוד שלך לא יהיה נייד על פני מערכות הפעלה מגוונות אלה.
במה Java שונה?
בתרחיש זה ג'אווה מספקת פרדיגמה חדשה, דרך חדשה לבניית תוכנה. כשאתה מתכנת בג'אווה, אתה מכוון ל מכונה וירטואלית. מכונה כזו קיימת כמושג, ושפת הג'אווה מספקת ממשקים לתכנות מול מכונה זו. לדוגמה, באפשרותך לבצע שאילתות בכמות הזיכרון הזמינה, מספר המעבדים, ממשקי הרשת וכו 'של המחשב הווירטואלי.
כיצד בנויים יישומי Java?
שפת הג'אווה מספקת מהדר ג'אווה המתרגם את קוד המקור לקוד אובייקט. לאחר מכן קוד האובייקט מבוצע על ידי ה- מכונה וירטואלית של ג'אווה - -, שהיא תוכנית נפרדת מהמהדר. מערכת ההפעלה, בתורו, רואה במכונה הווירטואלית ג'אווה סתם תוכנית נוספת הפועלת במערכת ההפעלה ההיא.
נטל הניידות עבר כעת מתכנת היישומים לספק מכונות הג'אווה של ג'אווה. מתכנת היישומים כותב את התוכנה באמצעות פרימיטיביות של שפת הג'אווה, וג'אווה המכונה הוירטואלית אחראית לתרגום פרימיטיביות אלה למערכת ההפעלה המארחת מתקנים. כשיוצאת גרסה חדשה של מערכת ההפעלה, באחריות הספק לעדכן את המחשב הווירטואלי של ג'אווה כך שהיא תפעל נכון במערכת ההפעלה החדשה.
מהם היתרונות של מכונת הווירטואלי Java?
כאמור, המכונה הווירטואלית של ג'אווה מספקת מתכנת היישומים תצוגה וירטואלית של מערכת ההפעלה והחומרה. תצוגה וירטואלית זו היא בצורת ממשקים ושיטות שונות ומשמשת לבידוד מתכנת היישומים מההבדלים במערכת ההפעלה המארחת והחומרה שבבסיס. כך, מתכנת היישומים יכול לגשת למתקנים כמו ערכת כלים לניתוח, רשתות, גרפיקה תלת-ממדית, מספר מעבדים וכו '. מבלי להיזקק לשיחות ברמה נמוכה שבסופו של דבר הופכות את התוכנית ללא ניידת.
תוכנית ג'אווה נכתבת ומורכבת באמצעות מהדר הג'אווה. קוד האובייקט שהתקבל (נקרא קוד בתים) ניתן להעביר למערכת הפעלה מארחת שונה הפועלת על חומרה שונה ועליה לפעול ללא בעיות.
מהדר JIT
המכונה הווירטואלית של ג'אווה משתמשת ב- מהדר JIT לייעל את קוד הבייט באופן ספציפי עבור מעבד היעד. JIT מייצג בדיוק בזמן ומתייחס לאופטימיזציות זמן הריצה שה- JVM מחיל על קוד הבייט כדי לגרום לו לפעול טוב יותר במעבד הנוכחי.
יתרון נוסף בשימוש במכונה הווירטואלית Java הוא שהוא יכול להחיל אופטימיזציות שונות עבור מקרי שימוש שונים, כולם עם אותו קוד בייט. לדוגמא, Oracle JVM מספק שתי אפשרויות להפעלת קוד הבייט: מצב שרת ומצב לקוח. מצב השרת מייעל אופטימיזציה לתוכניות שרת המריצות זמן רב, ואילו מצב JVM של הלקוח מתייעל לזמני תגובה מהירים מכיוון שהוא ככל הנראה משמש במצב אינטראקטיבי.
לסיכום, יישום מקורי בנוי עבור חומרה ומערכת הפעלה ספציפית. לעומת זאת, אפליקציית ג'אווה עוקבת אחר א בנה פעם אחת לרוץ בכל מקום בפילוסופיה, על ידי קיום JVM להפעיל את הוראות קוד הבייט הידור. בעוד שבאופן מסורתי, יישומים מקוריים נצפו כביצועים יותר מאשר יישומי ג'אווה, אך לא תמיד זה נכון בגלל השימוש במערך JIT על ידי JVM.
האם פיתחת אפליקציה מקורית ונאלצת לעבור לג'אווה בגלל הניידות? או להפך בגלל בעיות ביצועים? ספרו לנו בתגובות למטה.
זיכוי תמונה: רווח_דמיון דרך Shutterstock.com