7 יכולות Hotspot ב-Java לשיפור הביצועים

רוני קרן נוגע ביכולות מעניינות שישפרו את ביצועי ה-Hotspot בצורה משמעותית, וזאת, ללא קשר לקוד ואולי אף מעבר אליו

הפוסט נכתב על ידי רוני קרן, מנהל אקדמי בתחום ה-JAVA בג’ון ברייס מכללת הייטק.

יח”צ

כיום, סביבת הפיתוח וההרצה של JAVA ניתנת לקהילה עם מנוע חזק ביותר. Hotspot שהוצעה כ-VM אלטרנטיבית ונסיונית בגרסת JDK1.3, הגיעה היום לשלב בוגר ויציב. לפיכך, די מתבקשת העובדה שביצועים אינם מתחילים ומסתיימים באיכות הקוד ובניסיון הרב שצברה קהילת המפתחים בשלל ה-APIs. כיום, כאשר מנוע משוכלל מסיע את עגלות ה-JAVA שאנו מתכנתים – ניתן ואף צריך לכוון ולשפר גם את המנוע.

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

להלן שבע מהיכולות המעניינות, מתוך רבות אחרות, של Hotspot אשר עשויות לשפר משמעותית את הביצועים ללא קשר או אולי מעבר לאיכות הקוד:

1. כיוון שטחי האיחסון לאובייקטים חדשים וישנים – הגיוני להניח שככל שישנם יותר תהליכים במערכת וככל שישנם יותר Concurrent Client – גדל מספר האובייקטים ה”חדשים” וקצרי החיים במערכת – תכונה זו מאפיינת בעיקר אפליקציות JEE. ניתן להגדיר ב-Hotspot את השטחים ב-HEAP אשר מוקדשים לאובייקטים חדשים וישנים לשימוש נכון יותר בזיכרון.

2. קוד שתורגם למערכת ההפעלה (interpreted code) יכול לשמש מופעים אחרים של ה-VM הרצים על אותה מערכת – יכולת זו קיימת כבר מ-JAVA 5 ו-Hotspot מספקת כמה פקודות לניהול ה-Shared Cache הזה. היכולת של VM אחת לעשות שימוש בטעינות שנעשו ע”י VM אחרת יכולה להשפיע ישירות על ביצועים בעיקר באפליקציות שטוענות באופן קבוע קוד חדש.

3. סוגים שונים של אלגוריתמים לניקוי זיכרון – Hotspot מספקת כמה יכולות מעניינות לגבי ניקוי זיכרון. היכולות נבדלות זו מזו באופן הניקוי וגם בשטח המוקצה לניקוי. ניתן לומר די בביטחה כי כיום ברוב האפליקציות נעשה שימוש בשני אלגוריתמים לניקוי זיכרון – האחד אמון על השטח השייך לאובייקטים חדשים והאחר לאובייקטים ישנים. כיוון שההתנהלות בין שני השטחים שונה בתכלית – אך טבעי ש-GC לאחד לא יהיה נכון ואופטימלי עבור האחר.

4. Refactoring אגרסיבי – אשר מתאים את הקוד המקומפל באופן אופטימלי למערכת ההפעלה. הקווים המנחים הם הפחתת הקפיצות בין stack אחד לאחר (למשל loop unrolling) וכמובן – חיסכון ביצירת אובייקטים. לאחרון התווספה יכולת מרשימה שהוצעה כנסיונית בגרסה Java 6, מופעלת כברירת מחדל ב-Java 7  וקרוייה – Escape Analysis.

5. תמיכה בשפות שהן Dynamically-Typed ,JVM – המשמשת זה לא מכבר כפלטפורמה לשפות script שונות ולא רק ל-JAVA. בנוסף, מנועי ה-scripts שהתווספו בגרסה Java 6 מאפשרים להריץ scripts מתוך קוד JAVA. חלק משפות אלו הינן dynamically-typed בעוד JAVA הינה strongly-typed. המשמעות היא שה-JVM היתה נאלצת לייצר מעין type dummy עבור כל פעולה שהיא מחוץ למסגרת של המחלקה (class) – והמחיר היה כמובן ביצועים. מגרסה Java 7 קיימת יכולת native להגדיר ל-JVM טיפוסים דינאמיים. ה-JVM “משדכת” כל קוד דינאמי למעין handler אשר מחבר את הקוד עם אובייקט מסויים ומתעדכן בזמן ריצה.

6. JVM-JMX עוד יכולת מדהימה של ה-JVM היא התוספת של JMX ושל DTrace Probes המאפשרים ניטור ה-JVM בזמן אמת הן מקוד JAVA והן משפות אחרות. באמצעות יכולות אלו ניתן למשל לבדוק כמה CPU צורך Thread מסויים וכדומה.

7. JRockit Features – תחילתו של הסיפור הוא בחברת Appeal Virtual Machines אשר פיתחה JVM והתאימה אותה, לטענתה, בעיקר לאפליקציות שרת (JEE). המוצר נרכש ע”י חברת BEA והוטמע בסביבת Weblogic Application Server שכיכב באותם ימים בעיקר בשוק הטלטקומוניקציה. לימים, נרכשה BEA ע”י חברת אורקל וזו – אוחדה עם SUN. כך התקרב לו לאיטו JVM מסחרי אל ה-JVM המסורתי. וכמובן שהצפוי מכל קורה: JRockit ו-Sun JVM מתקדמות לקראת איחוד היסטורי. ב-JAVA 7 update 4 כבר ניתן למצוא יכולות כאלו (למשל Flight Control).

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


הפוסט בחסות ג’ון ברייס מכללת הייטק


רוצים לשדרג את הידע שלכם בעולם ה-Java? הירשמו לכנס Jdev2012 אשר ייערך ב-25-26.7 יותר?

ג’ון ברייס מכללת הי-טק וטריינולוג’יק מזמינות אותך להיחשף, לפתח להוביל ולשדרג את היכולות שלכם. שריינו את מקומכם עוד היום בכנס המקצועי המוביל למפתחים בסביבת Java הכולל את מיטב המרצים ובעל ערך לימודי טהור עם מגוון סדנאות מקצועיות בנושאים מגוונים כגון: Java Concurrency | Scala | Spring | CDI | Grails | Akka  ExtJS  | NoSQL and Big Data with MongoD.

כנס JDEV2012 יערך בין התאריכים 25.7 ל-26.7 במלון דניאל בהרצליה לפרטים נוספים ולהרשמה הקליקו כאן.

 

כתב אורח

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

הגב

2 Comments on "7 יכולות Hotspot ב-Java לשיפור הביצועים"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 
Sort by:   newest | oldest | most voted
Miky Lestat
Guest
הנושא נשמע די מעניין בהתחלה, אך המאמר לא מכיל שום מידע קונקרטי, בעצם המידע שהמאמר נותן אינו רלוונטי בכלל…ההסברים נשמעים יותר ככותרות ולא כהסברים. ברור שהמאמר הזה נועד למומחי Java, לפחות לא למתכנתים למתחילים. אך ההסבר שיש על כל תוכנה אינו מתאים למתכנת מומחה… על כל תכונה שמוזכרת אפשר לכתוב מאמרים שלמים. ברור שאין מקום פה, אך הייתי שמח לראות יותר פירוטים, יותר מספרים, יותר השוואות ודוגמאות… ופחות "וכו…" ה JRockit Feature למשל, לא כתוב בכלל מה זה…רק כתוב מי החברה שפיתחה אותו… הייתי מצפה מג'ון ברייס לקבל מאמרים יותר מקצועיים…וזו לא הפעם הראשונה, אותה הבעיה הייתה גם במאמר לגבי… Read more »
אסף
Guest

תרגום יפה!

רואים שעשה אותו אדם ולא Google Translate.

wpDiscuz

תגיות לכתבה: