JavaRush /בלוג Java /Random-HE /הפסקת קפה מס' 60. כיצד פועל איסוף האשפה ב-Java (JVM). 15 ...

הפסקת קפה מס' 60. כיצד פועל איסוף האשפה ב-Java (JVM). 15 שאלות חשובות על אביב בראיון טכני

פורסם בקבוצה

איך עובד איסוף האשפה ב-Java (JVM)

מקור: DZone

תהליך איסוף אשפה בג'אווה

איסוף זבל של Java מקצה ומשחרר זיכרון באופן אוטומטי, כך שמפתחים לא צריכים לכתוב תוכנית נפרדת כדי לנהל זיכרון, וזה אחד היתרונות העיקריים של תכנות ב-Java. בכל פעם שתוכנית Java פועלת על ה-JVM, אובייקטים נוצרים בערימה ומייצגים חלק מהזיכרון שהוקצה לתוכנית. עם הזמן, חלק מהפריטים כבר לא יהיה צורך. אספן האשפה מוצא את החפצים שאינם בשימוש ומסיר אותם כדי לפנות זיכרון. הפסקת קפה מס' 61.  כיצד פועל איסוף האשפה ב-Java (JVM).  15 שאלות חשובות על אביב בראיון טכני - 1אספן האשפה, לאחר הערכת ערימת הזיכרון, יקבע אילו חפצים נמצאים בשימוש ואילו לא, ויסיר חפצים שאינם בשימוש. אובייקט בשימוש או בהתייחסות פירושו שחלק כלשהו מהתוכנית שלך עדיין שומר על מצביע לאובייקט זה. אם אובייקט אינו נמצא עוד בשימוש או שאינו מופנה עוד, אזי הוא לא יופנה עוד על ידי אף חלק של התוכנית. לפיכך, ניתן לשחרר זיכרון המשמש אובייקט ללא הפניה על ידי ביצוע איסוף אשפה. הפסקת קפה מס' 61.  כיצד פועל איסוף האשפה ב-Java (JVM).  15 שאלות חשובות על אביב בראיון טכני - 2ניתן לתאר את שחרור הזיכרון על ידי שלושה תהליכים עיקריים:
  1. צִיוּן.
  2. הסרה רגילה.
  3. הסרה עם דחיסה.
סימון הוא תהליך זיהוי חלקי זיכרון שנמצאים ואינם בשימוש אספן האשפה. תיוג הוא בדרך כלל השלב הראשון. מחיקה רגילה היא תהליך של מחיקת אובייקטים שאין להם הפניה, השארת אובייקטים ומצביעים אליהם יש הפניה בשטח פנוי. מחיקת דחיסה - בנוסף למחיקת אובייקטים ללא הפניה, היא דוחסת את שאר האובייקטים המוזכרים, ומזיזה את האובייקטים יחד כדי להפוך את הקצאת הזיכרון החדשה לקלה ומהירה הרבה יותר.

זיכרון ערימת JVM

הפסקת קפה מס' 61.  כיצד פועל איסוף האשפה ב-Java (JVM).  15 שאלות חשובות על אביב בראיון טכני - 3

דור צעיר

אובייקטים חדשים שנוצרו מתחילים בדור הצעיר. זה נקרא גם משתלה כי חפצים חדשים מתחילים לחיות כאן. הדור הצעיר מחולק ל-Eden Space, שם מתחילים כל האובייקטים החדשים, ושני מרחבי הישרדות, שבהם חפצים מועברים מעדן לאחר ששרדו במחזור איסוף אשפה בודד. הם גורמים לאיסוף מחדש של אשפה כאשר חפצים נאספים על ידי אספן האשפה של הדור הצעיר. Eden Space כל האובייקטים החדשים נוצרים לראשונה ב- Eden Space. איסוף אשפה מינורי יפעל כאשר יגיע לסף שנקבע על ידי ה-JVM. האובייקטים שהוזכרו מועברים מ-Eden Space למרחב החיסכון הראשון ('עדן' ו-'מ' -> 'אל'). אובייקטים ללא הפניה מוסרים כאשר עדן שטח מנוקה. הישרדות 0 (S0) ושורד 1 (S1) שני השדות של הישרדות (מ-ואל) מתחילים ריקים. כאשר איסוף האשפה מתרחש שוב, כל האובייקטים המוזכרים מועברים לחלל הנותר. עם סיום איסוף האשפה, המקומות (שמות) של הניצול "מ" ו"אל" מוחלפים. אם במהלך איסוף האשפה הקודם S1 היה בתפקיד "אל", כעת S1 מלא והופך ל"מ". בהתאם לכך, אם S0 ריק, אז הוא יהפוך ל"אל".

דור ישן

לאחר איסוף זבל מינורי, כאשר חפצים מיושנים מגיעים לסף גיל מסוים (כברירת מחדל, הסף של JVMs מודרניים מוגדר ל-15 מחזורי איסוף אשפה), הם, יחד עם חפצים ארוכים, עוברים מהדור הצעיר לדור הישן. כאשר אוספי אשפה קטנים ממשיכים להתעורר, חפצים ממשיכים לנוע לחלל הדור הישן, הוא יתחיל להתמלא ואיסוף אשפה גדול יתרחש. איסוף אשפה בסיסי מתרחש כאשר חפצים נאספים על ידי אספן האשפה של הדור הישן. הפסקת קפה מס' 61.  כיצד פועל איסוף האשפה ב-Java (JVM).  15 שאלות חשובות על אביב בראיון טכני - 4

דור קבוע

מטא נתונים כגון מחלקות ושיטות מאוחסנים ב-Permanent Generation. כיתות שאינן בשימוש עוד ניתנות לפינוי ממנו על ידי אוסף האשפה. במהלך איסוף אשפה מלא נאספים חפצים שאינם בשימוש מכל הדורות.הפסקת קפה מס' 61.  כיצד פועל איסוף האשפה ב-Java (JVM).  15 שאלות חשובות על אביב בראיון טכני - 5

סוגי איסוף אשפה

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

איסוף זבל קטן

איסוף האשפה ממרחב הדור הצעיר נקרא Minor Garbage Collection. סוג זה של בנייה מופעל תמיד כאשר ה-JVM אינו יכול להקצות מקום לאובייקט חדש, כלומר כאשר Eden Space מלא. לפיכך, ככל ששיעור הבחירה גבוה יותר, כך מתרחשת איסוף אשפה מזערית לעתים קרובות יותר.

איסוף אשפה מרכזי

Major Garbage Collection מנקה את Tenured (חלל ישן). מכיוון שהדור הישן גדול יותר, הרכבה מתרחשת בתדירות נמוכה יותר מאשר הדור הצעיר. כאשר חפצים נעלמים מהדור הישן, אנו אומרים ש"איסוף אשפה גדול" התרחש. אספן הדור הישן ינסה לחזות מתי הוא צריך להתחיל לאסוף כדי להימנע מכשלונות קידום מהדור הצעיר. אספנים עוקבים אחר סף המילוי של הדור הישן ומתחילים לאסוף כאשר סף זה נחרג. אם רף זה אינו מספיק כדי לעמוד בדרישות הקידום, יוצאת לדרך "אוסף האשפה המלא".

איסוף אשפה מלא

Full Garbage Collection מנקה את כל החבורה - גם חללים צעירים וגם מבוגרים. אנשים רבים מתבלבלים בין Major (דור ישן בלבד) ל-Full GC (Young + OLD (Heap)). Full Garbage Collection כולל קידום של כל החפצים החיים מהדור הצעיר ועד הישן לאחר הרכבה ודחיסה של הדור הישן. איסוף אשפה שלם יהווה תחנה לעצור-העולם. זה מבטיח שלא מוקצים חפצים חדשים ושחפצים לא יהפכו לבלתי נגישים בזמן שהאספן פועל.

15 שאלות חשובות על אביב בראיון טכני

מקור: Dev.to Spring Framework היא מסגרת אוניברסלית לפלטפורמת Java. תכונות הליבה שלו יכולות לשמש כל יישום Java, ויש הרחבות ליצירת יישומי אינטרנט מבוססי Java EE. להלן רשימה של שאלות ותשובות לראיון הקשורות לקידוד אביב. אנו מקווים שהם יעזרו לך להתכונן לראיון הטכני שלך בשנת 2021.הפסקת קפה מס' 61.  כיצד פועל איסוף האשפה ב-Java (JVM).  15 שאלות חשובות על אביב בראיון טכני - 6

1. מהו אביב?

תשובות: Spring היא מסגרת קוד פתוח לפיתוח יישומי Java. ניתן להשתמש בתכונות הליבה של Spring Framework לפיתוח כל יישום Java, והרחבות זמינות גם ליצירת יישומי אינטרנט המבוססים על פלטפורמת Java EE. המסגרת של Spring שואפת להפוך את J2EE לקל יותר לשימוש בפיתוח ולשפר את שיטות התכנות על ידי שילוב מודל מבוסס POJO (Plain Old Java Object).

2. מהו היקף ברירת המחדל של שעועית במסגרת Spring?

תשובות: היקף ברירת המחדל של שעועית הוא Singleton (תבנית עיצוב).

3. מהו חיווט שעועית?

תשובה: חיווט שעועית הוא הפעולה של יצירת אסוציאציות בין רכיבי יישום (שעועית) במיכל קפיץ.

4. מהו Spring Security?

תשובות: Spring Security הוא מודול נפרד של Spring framework המתמקד במתן שיטות אימות והרשאה ליישומי Java. זה גם מתקן את רוב פרצות האבטחה הנפוצות כמו התקפות CSRF. כדי להשתמש באבטחת Spring ביישומי אינטרנט, אתה יכול להתחיל עם הערה פשוטה: @EnableWebSecurity.

5. מה כלול בהגדרה שעועית?

תשובה: הגדרת שעועית מכילה מידע הנקרא מטא-נתונים של תצורה שהמיכל צריך לדעת את הדברים הבאים:
  • איך ליצור שעועית;
  • פרטי מחזור החיים של שעועית;
  • תלות בשעועית.

6. מה זה Spring Boot?

תשובות: Spring Boot הוא פרויקט המספק קבוצה מוגדרת מראש של מסגרות לצמצום תצורת ה-boilerplate כך שתוכל להפעיל יישום Spring עם מינימום קוד.

7. מהו DispatcherServlet ולמה הוא משמש?

תשובה: DispatcherServlet הוא יישום של דפוס העיצוב של הבקר הקדמי המטפל בכל בקשות האינטרנט הנכנסות ליישום Spring MVC. דפוס ה-Front Controller (Enterprise Application Design Pattern) הוא דפוס נפוץ ביישומי אינטרנט שתפקידם לקחת את כל הבקשה ולנתב אותה למרכיבים שונים של האפליקציה לצורך עיבוד בפועל. באביב נעשה שימוש ב-MVC DispatcherServlet כדי למצוא את הבקר הנכון לטיפול בבקשה. זה נעשה באמצעות מיפוי מטפל: לדוגמה, ההערה @RequestMapping.

8. האם יש צורך ב-spring-mvc.jar ב-classpath או שהוא חלק מ-spring-core?

תשובות: Spring-mvc.jar הוא חלק מ-spring-core, מה שאומר שאם אתה רוצה להשתמש במסגרת Spring MVC בפרויקט Java שלך, עליך לכלול spring-mvc.jar ב-classpath של היישום שלך. ביישום אינטרנט של Java, spring-mvc.jar ממוקם בדרך כלל בתיקייה /WEB-INF/lib.

9. מהם היתרונות בשימוש באביב?

תשובה: להלן רשימה של כמה יתרונות של שימוש ב-Spring Framework:
  • קל משקל - האביב הוא קל יחסית בכל הקשור לגודל ושקיפות. הגרסה הבסיסית של Spring Framework היא בערך 2 MB.
  • היפוך שליטה (IOC) - צימוד רופף מושג באביב באמצעות טכניקת היפוך שליטה. אובייקטים מספקים את התלות שלהם במקום ליצור או לחפש אובייקטים תלויים.
  • מונחה היבט - Spring תומך בתכנות מונחה היבטים ומבטיח פיתוח עקבי על ידי ניתוק ההיגיון העסקי של האפליקציה משירותי המערכת.
  • מיכלים - Spring Container יוצר חפצים, מחבר אותם יחד, מגדיר אותם ומנהל אותם מהיצירה ועד לסילוקם.
  • MVC Framework - Spring web framework היא מסגרת אינטרנט מעוצבת היטב של MVC המספקת אלטרנטיבה למסגרות אינטרנט כמו Struts או מסגרות אינטרנט אחרות מעוצבות מדי או פחות פופולריות.
  • ניהול עסקאות - ל-Spring יש ממשק ניהול עסקאות עקבי שיכול להתאים לטרנזקציות מקומיות (למשל באמצעות מסד נתונים בודד) או עסקאות גלובליות (למשל באמצעות JTA).
  • טיפול בחריגים - Spring מספק API נוח להמרת חריגים ספציפיים לטכנולוגיה (כגון אלה שנזרקו על ידי JDBC, Hibernate או JDO) לחריגים עקביים ולא מסומנים.

10. מה זה שעועית אביב?

תשובות: שעועית אביב היא מופעים של אובייקטים המנוהלים על ידי Spring Container. הם נוצרים ומחוברים על ידי המסגרת ומכניסים אותם ל"שקית חפצים" (מיכל) שממנו ניתן מאוחר יותר לשלוף אותם. חיווט הוא מה שמהווה הזרקת תלות. זה אומר שאתה יכול פשוט לומר, "אני צריך את הדבר הזה," והמסגרת תפעל לפי כללים מסוימים כדי להשיג את האובייקט הזה.

11. מה המטרה של מודול Core Container?

תשובות: מיכל הליבה מספק את פונקציונליות הליבה של ה-Spring framework. המרכיב העיקרי של המיכל הראשי הוא BeanFactory, יישום של דפוס המפעל. BeanFactory משתמשת בבקרת היפוך כדי להפריד את התלות של התצורה ומפרט היישום מקוד היישום בפועל.

12. מהו הקשר יישום?

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

13. איך לשלב Java Server Faces (JSF) עם Spring?

תשובה: JSF ו-Spring אכן חולקים חלק מאותן תכונות, במיוחד בתחום שירותי היפוך בקרה. על ידי הכרזת שעועית מנוהלת של JSF בקובץ התצורה faces-config.xml, אתה מאפשר ל-FacesServlet להפעיל את השעועית הזו בעת ההפעלה. לדפי ה-JSF שלך יש גישה לשעועית הזו ולכל המאפיינים שלהן. ניתן לשלב JSF ו-Spring בשתי דרכים: DelegatingVariableResolver : Spring מגיע עם פותר משתנה JSF המאפשר לך להשתמש ב-JSF וב-Spring ביחד. DelegatingVariableResolver מאציל תחילה את חיפוש הערכים למפרש ברירת המחדל של יישום ה-JSF הבסיסי, ולאחר מכן ל"הקשר העסקי" של Spring WebApplicationContext. זה מקל על הזרקת תלות לשעועית המנוהלת על ידי JSF. FacesContextUtils : VariableResolver מותאם אישית עובד היטב בעת מיפוי המאפיינים שלו לשעועית ב-faces-config.xml. אבל אם אתה צריך ללכוד שעועית, מחלקה FacesContextUtils עושה את זה קל. זה דומה ל-WebApplicationContextUtils חוץ מזה שהוא מקבל פרמטר FacesContext ולא פרמטר ServletContext.
ApplicationContext ctx = FacesContextUtils.getWebApplicationContext (FacesContext.getCurrentInstance ());

14. מהי Spring MVC framework?

תשובות: המסגרת של Spring Web MVC מספקת ארכיטקטורת מודל-view-controller ורכיבים מובנים מראש שניתן להשתמש בהם לפיתוח יישומי אינטרנט גמישים ומקושרים באופן רופף. תבנית ה-MVC מביאה להפרדה בין היבטים שונים של יישום (לוגיקת קלט, לוגיקה עסקית ולוגיקת ממשק משתמש) תוך שהיא מאפשרת צימוד רופף בין אלמנטים אלו.

15. איך עובד טיפול באירועים באביב?

תשובה: העיבוד ב- ApplicationContext מסופק דרך המחלקה ApplicationEvent וממשק ApplicationListener . כלומר, אם שעועית מיישמת ApplicationListener , אז בכל פעם ש- ApplicationEvent מתפרסם ב- ApplicationContext , השעועית הזו רשומה. תודה שקראת ובהצלחה בראיון הטכני שלך!
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION