Java (פלטפורמת תוכנה)

פלטפורמת התוכנה ג'אווה (באנגלית: Java software platform) היא מכלול מוצרי תוכנה ומפרטים של חברת סאן מיקרוסיסטמס (כיום חברת בת של חברת אורקל), אשר ביחד מרכיבים מערכת לפיתוח יישומים ולפריסתם על גבי פלטפורמות שונות (cross-platform). ג'אווה נמצאת בשימוש במגוון רחב של פלטפורמות מחשוב, החל במערכות משובצות מחשב וטלפונים סלולריים וכלה בשרתים ומחשבי-על.
כתיבה בשפת התכנות Java היא הדרך העיקרית ליצירת קוד שיעבור הידור ל-Java bytecode, שפת ביניים הניתנת להרצה על גבי כל פלטפורמה שקיים עבורה מימוש של המכונה הווירטואלית של ג'אווה - JVM. קיימים גם מהדרי bytecode עבור שפות אחרות, כגון Ada, JavaScript, Python ו-Ruby. כמו כן פותחו גם כמה שפות חדשות המיועדות לרוץ על גבי ה-Java Virtual Machine, כגון: Scala, Clojure ו-Groovy.
התחביר של שפת Java הושפע רבות מהשפות C ו-++C, אבל עקרונות התכנות מונחה-עצמים ב-Java מבוססים על השפות Smalltalk ו-Objective-C. בג'אווה לא נעשה שימוש במבנים ברמה הנמוכה (low-level) כגון מצביעים, ויש לה מודל זיכרון פשוט מאוד שבו כל אובייקט מוקצה על גבי ה-Heap, וכל המשתנים של טיפוסים מורכבים הם references. ניהול הזיכרון מבוצע באמצעות איסוף זבל אוטומטי על ידי ה-JVM.
בשנת 2006 הפכה סאן מיקרוסיסטמס את מרבית המימוש של ג'אווה לזמין תחת הרישיון הציבורי הכללי של גנו, אם כי ישנם עדיין חלקים המופצים כקבצים בינאריים שהודרו מראש בעקבות בעיות זכויות יוצרים.

הפלטפורמה

הפלטפורמה של ג'אווה אינה ספציפית לסוג מעבד או מערכת הפעלה מסוימים. הפלטפורמה מורכבת ממנוע להרצת תוכניות (אשר נקרא מכונה וירטואלית), מהדר, וקבוצה של ספריות תוכנה הממומשות עבור מגוון סוגי חומרה ומערכות הפעלה שונות, כך שתוכניות ג'אווה תוכלנה לרוץ באופן זהה בכל סביבה (ראו: תוכנה חוצת פלטפורמות).
הפלטפורמה מורכבת מכמה תוכנות, שכל אחת מהן מספקת חלק מהיכולות הכוללות של הפלטפורמה. לדוגמה, המהדר של ג'אווה, אשר ממיר קוד מקור של ג'אווה ל-Java bytecode (שפת ביניים עבור המכונה הווירטואלית של ג'אווה - JVM), מסופק כחלק מה-Java Development Kit. סביבת ההרצה של ג'אווה (Java Runtime Environment) משלימה את ה-JVM עם מהדר ה-just-in-time שממיר בזמן ריצה (on the fly) את קוד הביניים bytecode לשפת מכונה (native code). כמו כן מסופקות ספריות נרחבות שמכילות רכיבים נוספים, חלקם זמינים רק עבור מהדורות מסוימות.
הרכיבים החיוניים בפלטפורמה הם: המהדר לשפת Java, הספריות, וסביבת ההרצה (JRE) שבה קוד הביניים Java bytecod "רץ" בהתאם לכללים המוכתבים על ידי המפרט של המכונה הווירטואלית.
נכון לחודש ספטמבר 2017, הגרסה העדכנית של פלטפורמת ג'אווה היא 9.0.1 או 9 (שני המספרים מציינים את אותה הגרסה). גרסה 9 היא גרסת המוצר ו-9.0.1 היא גרסת הפיתוח.

ספריות ג'אווה – Java class libraries

מרבית מערכות ההפעלה המודרניות מספקות גופי קוד גדולים הניתנים לשימוש חוזר, על מנת להקל על עבודת המתכנת. בדרך כלל הקוד הזה מסופק בצורה של ספריות הניתנות לטעינה דינאמית, שיישומים יכולים לקרוא להן בזמן ריצה. כיוון שהפלטפורמה של ג'אווה אינה תלויה במערכת הפעלה מסוימת, יישומי ג'אווה אינם יכולים להסתמך על שום ספרייה של מערכת ההפעלה שנכתבה מראש. במקום זאת, הפלטפורמה של ג'אווה מספקת קבוצה מקיפה של ספריות סטנדרטיות משלה, שנקראות class libraries, אשר מכילות את רוב הפונקציות הניתנות לשימוש חוזר, שבדרך כלל ניתן למצוא במערכות הפעלה מודרניות. מרבית הספריות של ג'אווה ממומשות בשפת ג'אווה גם כן. לדוגמה, הספרייה Swing מציירת את ממשק המשתמש ומטפלת באירועים בעצמה, ובכך מבטלת הרבה מההבדלים הקטנים הקיימים בדרך שבה פלטפורמות שונות מטפלות אפילו ברכיבים דומים.
ה-class libraries משרתות שלוש מטרות בפלטפורמה של ג'אווה. הראשונה, כמו במקרה של ספריות קוד סטנדרטיות אחרות - הספריות של ג'אווה מספקות למתכנת קבוצת פונקציות מוכרות היטב, לצורך ביצוע של משימות נפוצות, כגון תחזוקה של רשימות פריטים או ביצוע ניתוח מחרוזות (parsing) מורכב. המטרה השנייה של ספריות ג'אווה היא לספק ממשק אבסטרקטי עבור משימות שבדרך כלל תלויות מאוד בחומרה ובמערכת ההפעלה. משימות כגון גישה לרשת וגישה לקבצים בדרך כלל "מסובכות" עם המימושים הייחודיים של כל פלטפורמה. הספריות java.net ו-java.io מממשות שכבת אבסטרקציה בקוד native למערכת ההפעלה, ולאחר מכן מספקות ממשק סטנדרטי עבור יישומי ג'אווה, לצורך ביצוען של המשימות הללו. ולבסוף, כאשר פלטפורמת בסיס מסוימת אינה תומכת בכל התכונות שיישום ג'אווה מצפה להן, הספריות של ג'אווה פועלות כדי לכסות בצורה אלגנטית על הרכיבים החסרים, באמצעות אמולציה על מנת לספק תחליף, או לפחות על ידי מתן דרך עקבית לבדוק האם תכונה מסוימת קיימת או לא.

ערכת הפיתוח של ג'אווה – Java Development Kit

ערכת הפיתוח של ג'אווה (JDK)  היא מוצר של סאן המיועד עבור מפתחי ג'אווה. מאז הופעתה של ג'אווה, ה-JDK הייתה ערכת פיתוח התוכנה (Software Development Kit, SDK) הנפוצה ביותר עבור ג'אווה. ה-JDK כוללת מהדר לשפת Java, עותק מלא של סביבת ההרצה של ג'אווה (JRE), והרבה כלי פיתוח חשובים נוספים.

היסטוריה

הפלטפורמה של ג'אווה ושפת ג'אווה החלו את דרכן כמיזם פנימי בחברת סאן מיקרוסיסטמס בדצמבר 1990, במטרה ליצור אלטרנטיבה לשפות התכנות C ו-++C. המהנדס פטריק נוטון היה מתוסכל ממצבם של ממשקי תכנות היישומים של סאן בשפות C ו-++C. בזמן ששקל לעזוב לחברת NeXT, נוטון קיבל הזדמנות לעבוד על יצירת טכנולוגיה חדשה, וכך החל ה"פרויקט החשאי" (Stealth Project).
זמן קצר לאחר מכן, שמו של "הפרויקט החשאי" שונה ל"הפרויקט הירוק" (Green Project), עם ג'יימס גוסלינג ומייק שרידן שהצטרפו אל נוטון. ביחד עם מהנדסים נוספים, הם החלו את עבודתם בעיר מנלו פארק שבקליפורניה. הם ניסו לפתח טכנולוגיה חדשה לתכנות הדור הבא של מכשירים חכמים (smart appliances), שסאן ציפתה שיפתחו עבורה הזדמנויות חדשות.
בהתחלה, הצוות שקל להשתמש ב-++C, אבל הרעיון נדחה ממספר סיבות. כיוון שהם פיתחו מערכות משובצות מחשב בעלות משאבים מצומצמים, הם החליטו ש-++C תדרוש יותר מדי זיכרון ושהמורכבות שלה תוביל לשגיאות פיתוח. מכיוון שב-++C אין איסוף זבל, על המתכנת לדאוג לנהל את זיכרון המערכת בעצמו, וזוהי משימה לא פשוטה שלעיתים קרובות גוררת שגיאות. לצוות הפיתוח הפריע גם שב-++C חסרות יכולות כגון אלמנטים ניידים (portable facilities) לצורכי אבטחה, תכנות מבוזר ושימוש בתהליכונים. ולבסוף, הם רצו פלטפורמה שניתן יהיה להעביר אותה בין כל סוגי המכשירים.
ביל ג'וי חזה שֹפה חדשה המשלבת בין השפות Mesa ו-C. במאמר תחת הכותרת Further ("הלאה"), הוא הציע לסאן שהמהנדסים שלה יפתחו סביבה מונחית-עצמים המבוססת על ++C. בהתחלה גוסלינג ניסה לשנות ולהרחיב את ++C (מה שהוא קרא לו "-- ++ ++C"), אבל עד מהרה זנח את הרעיון לטובת יצירת שפה חדשה, שהוא קרא לה Oak (עץ אלון), על שם העץ שעמד מחוץ למשרד שלו.
בקיץ של שנת 1992, המפתחים כבר יכלו להציג חלקים מהפלטפורמה החדשה, שכללה את מערכת ההפעלה Green, שפת Oak, ספריות תוכנה וחומרה. הניסיון הראשון שלהם, שהוצג ב-3 בספטמבר 1992, התמקד בבניית מחשב כף יד (PDA) שנקרא Star7, שכלל ממשק משתמש גרפי וסוכן חכם בשם Duke שתפקידו לסייע למשתמש. בחודש נובמבר של אותה שנה, Green Project התפצל מסאן מיקרוסיסטמס והפך לחברת בת שלה בשם firstperson. בשלב זה הצוות עבר לפאלו אלטו, קליפורניה. הצוות של firstperson שאף לבנות מכשירים אינטראקטיביים מאוד, וכאשר חברת טיים וורנר פירסמה מכרז לקבלת הצעה עבור ממיר טלוויזיה דיגיטלי (set-top box), חברת firstperson שינתה את המטרה שלה והגיבה עם הצעה עבור פלטפורמה לממיר דיגיטלי. עם זאת, תעשיית הכבלים הרגישה שהפלטפורמה של firstperson נתנה יותר מדי שליטה למשתמש, ו-firstperson הפסידו במכרז לטובת חברת Silicon Graphics. עסקה נוספת עם חברת 3DO עבור ממירים דיגיטליים נכשלה אף היא. לאחר שלא הצליחה ליצור עניין בקרב תעשיית הטלוויזיה, חברת firstperson אוחדה חזרה עם סאן מיקרוסיסטמס.

ג'אווה פוגשת את האינטרנט

בחודש יוני 1994, לאחר שלושה ימים של סיעור מוחות עם ג'ון גייג', המדען הראשי של סאן, גוסלינג, ג'וי, נוטון, וויין רוסינג ואריק שמידט, הצוות תכנן את הפלטפורמה מחדש, והפעם ייעד אותה עבור ה-World Wide Web. הם הרגישו שעם התפתחותם של דפדפנים גרפיים כמו Mosaic, האינטרנט היה בדרכו להפוך למדיום אינטראקטיבי מאוד, כפי שהם צפו קודם לכן שהטלוויזיה בכבלים תהפוך להיות. כאַב טיפוס, נוטון פיתח דפדפן קטן בשם WebRunner (הקרוי על שם הסרט בלייד ראנר). מאוחר יותר שמו של הדפדפן שונה ל-HotJava.
באותה שנה, שמה של השפה Oak שונה ל-Java, לאחר שהתגלה כי השם Oak כבר היה תפוס כסימן מסחרי על ידי חברת Oak Technology. אף על פי שגרסה 1.0a של Java הייתה זמינה להורדה כבר בשנת 1994, השחרור הפומבי הראשון של Java הייתה גרסה 1.0a2 ביחד עם הדפדפן HotJava, עליהם הכריז גייג' בוועידת SunWorld ב-23 במאי 1995. הכרזה זו לוותה בהכרזה מפתיעה של מארק אנדריסן, סמנכ"ל נטסקייפ, על כך שהדפדפנים של נטסקייפ יכללו תמיכה בג'אווה. ב-9 בינואר 1996, סאן מיקרוסיסטמס יסדה את קבוצת JavaSoft שמטרתה להמשיך בפיתוח הטכנולוגיה.

שימוש במחשבים אישיים

על פי אורקל, סביבת ההרצה של ג'אווה (Java Runtime Environment - JRE) נמצאת בלמעלה מ-850 מיליון מחשבים אישיים. מיקרוסופט הפסיקה לספק את ה-JRE עם מערכות ההפעלה שלה אחרי שסאן מיקרוסיסטמס תבעה אותה על כך שהוסיפה מחלקות ייעודיות עבור Windows לתוך סביבת ההרצה של ג'אווה שהיא סיפקה, ועל כך שהפכה את המחלקות החדשות הללו לזמינות דרך שפת התכנות ++J. כיום משתמש המעוניין להריץ יישומי ג'אווה ב-Windows צריך להוריד ולהתקין בחינם את סביבת ההרצה של ג'אווה מהאתר של אורקל.
סביבת ההרצה של ג'אווה מסופקת ביחד עם מערכת ההפעלה Mac OS X של אפל, והפצות רבות של לינוקס כוללות את חבילת התוכנות החופשיות GNU Classpath, אשר תואמות חלקית למפרט הרשמי של ג'אווה, ומספר הולך וגדל של הפצות כוללות את חבילת IcedTea התואמת ברובה למפרט הרשמי.
מבין יישומי ג'אווה הנמצאים בשימוש נפוץ יחסית במחשבים אישיים נכללות סביבות הפיתוח המשולבות NetBeans ו-Eclipse, והתוכנות לשיתוף קבצים LimeWire ו-Vuze. ג'אווה משמשת גם בתוכנה המתמטית MATLAB, הן עבור יצירת ממשק המשתמש והן בליבת המערכת. כמו כן ג'אווה משמשת ליצירת ממשקי משתמש חוצי-פלטפורמות (cross-platform) עבור יישומי שיתוף פעולה כגון Lotus Notes.

שימוש במכשירים ניידים

Java ME הפכה לפופולרית במכשירים ניידים, שם היא מתחרה בסימביאן, BREW ו-NET Compact Framework..
ריבוי היצרנים של טלפונים סלולריים הוביל לצורך בסט סטנדרטים מאוחד, כך שתוכניות תוכלנה לרוץ על גבי טלפונים של יצרנים שונים. לצורך כך נוצר ה-MIDP – Mobile Information Device Profile – מפרט עבור השימוש בג'אווה במכשירים עם מערכות משובצות מחשב כגון טלפונים סלולריים ומחשבי כף יד. הסטנדרט הראשון היה MIDP 1, אשר תוכנן עבור מכשירים בעלי מסך קטן, ללא גישה לאודיו ולתוכניות המוגבלות לגודל של עד 32KB. המפרט החדש יותר, MIDP 2, מאפשר גישה לאודיו ותוכניות בגודל של עד 64KB. כיוון שיכולות הטלפונים משתפרות מהר יותר מקצב עדכון הסטנדרטים, חלק מיצרני הטלפונים מורידים חלק מהמגבלות המוטלות על ידי הסטנדרטים, לדוגמה, את מגבלת הגודל המקסימלי של תוכניות.
מערכת ההפעלה אנדרואיד של גוגל משתמשת בשפת ג'אווה, אבל לא בספריות של ג'אווה, לפיכך פלטפורמת האנדרואיד אינה יכולה להקרא ג'אווה. אנדרואיד מריצה את הקוד על גבי המכונה הווירטואלית Dalvik במקום ה-JVM.

ביצועים

בימים המוקדמים של ג'אווה (לפני המימוש של המכונה הווירטואלית HotSpot בגרסה 1.3 של ג'אווה בשנת 2000), נמתחה ביקורת על הביצועים שלה. נכון לשנת 2012, באופן כללי אין יותר בסיס לביקורת זו. הודגם כי ג'אווה רצה במהירות דומה לקוד native (בשפת מכונה) שעבר אופטימיזציות. מדידות ביצועים של מימושים מודרניים של ה-JVM הראו כי זוהי אחת מפלטפורמות השפה המהירות ביותר הזמינות כיום – בדרך כלל איטית רק במעט לעומת ++C/C.
הביצועים של ג'אווה השתפרו משמעותית לעומת הגרסאות המוקדמות. בכמה מבחנים הודגם כי הביצועים של מהדרי JIT דומים למדי לביצועים שמתקבלים ממהדרים לשפת מכונה.
את ה-Java bytecode ניתן לפרש בזמן ריצה על ידי מכונה וירטואלית, או שניתן להדר אותו בזמן הטעינה או בזמן הריצה לקוד native שרץ ישירות על גבי החומרה של המחשב. פירוש הוא איטי מביצוע של קוד native, והידור בזמן הטעינה או בזמן הריצה מביא לירידה התחלתית בביצועים לצורך ביצוע ההידור. כל המימושים המודרניים של ה-JVM נוקטים בגישת ההידור, וכך לאחר זמן ראשוני לצורך אתחול, הביצועים הם שווי ערך לאלה של קוד native.

פלטפורמות דומות

הצלחתהּ של Java ושל גישת ה-"כְּתוֹב פעם אחת, הָרֶץ בכל מקום" (write once, run anywhere) שלה, הובילו למיזמים דומים נוספים, שהבולט שבהם הוא פלטפורמת NET. (דוט-נט) של מיקרוסופט, שהופיעה בשנת 2002 ומשלבת הרבה מההיבטים המוצלחים של Java. דוט-נט בצורתה השלמה (במימוש של מיקרוסופט) הייתה זמינה במקור רק עבור פלטפורמות Windows, בעוד ש-Java זמינה במלואה עבור פלטפורמות שונות רבות. דוט-נט נבנתה במטרה לתמוך במגוון שפות תכנות, בעוד שהפלטפורמה של Java נבנתה בהתחלה במטרה לתמוך רק בשפת Java, אם כי מאז פותחו עוד הרבה שפות ל-JVM.
דוט-נט כללה במקור שפה דמוית-ג'אווה שנקראה #Visual J (ויז'ואל ג'יי שארפ; לפני כן היא נקראה ++J), שאינה תואמת את המפרט של Java. ספריית הקוד של #Visual J תואמת בעיקר לגרסה 1.1 הישנה של ה-JDK. מסיבות אלה, השפה הזאת מהווה יותר שפת-מעבר מ-Java לפלטפורמת הדוט-נט, מאשר שפת דוט-נט מדרגה ראשונה. העבודה על #Visual J הופסקה עם השחרור של Microsoft Visual Studio 2008. מיקרוסופט המשיכה לתמוך בגרסה הקיימת של #Visual J שהופצה עם Visual Studio 2005 עד לשנת 2015.