JavaRush /בלוג Java /Random-HE /רמה 34. תשובות לשאלות ראיון בנושא הרמה
lichMax
רָמָה
Санкт-Петербург

רמה 34. תשובות לשאלות ראיון בנושא הרמה

פורסם בקבוצה
חיפשתי באתר באמצעות החיפוש המקורי שלי וחיפשתי הכל באמצעות גוגל - אין תשובות לשאלות מהרמה הזו. אולי פספסתי משהו, והם עדיין כאן איפשהו באתר!? רמה 34. תשובות לשאלות ראיון בנושא רמה - 1ליתר בטחון, אני מצרף את התשובות שכתבתי לעצמי: שאלות לראיון:
  1. מהו איסוף אשפה?
  2. מתי נקראת השיטה finalize?
  3. מה קורה אם finalizeמתרחש חריג בשיטה?
  4. מה קרה SoftReference?
  5. מה קרה WeakReference?
  6. מה קרה PhantomReference?
  7. איך זה עובד WeakHashMap? איפה משתמשים בו?
  8. למה אתה צריך להעביר תור לבנאי PhantomReference?
  9. למה אתה צריך לוגר?
  10. אילו הגדרות לוגר אתה מכיר?
התשובות שלי:
  1. זהו מנגנון להשמדת חפצים מיותרים. חפצים שאינם נחוצים הם חפצים שאינם בשימוש. ישנן שתי דרכים למצוא אובייקטים כאלה: ספירת הפניות ומעקב. במקרה הראשון, כל אובייקט משויך למשתנה המאחסן את מספר ההפניות לאובייקט זה. אם מספר זה יורד לאפס, החפץ נחשב למת. במקרה השני, אספן האשפה עוקב אחר הפניות של אובייקטים מנקודות השורש ועד הסוף (עד הערך האפס), וחוצה את כל העץ הזה. חפצים שהוא לא יכול להגיע אליהם מנקודות השורש נחשבים למתים. נקודות השורש הן כולן פתילים פעילים, השיטה הראשית, הארגומנטים של השיטה main(), כמו גם כל המשתנים הסטטיים של המחלקה שבה השיטה נמצאת main().

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

    Для второй области сборка мусора идёт несколько по-другому. Там есть одна большая область, она ни на что не делится, но сборщик мусора все живые an objectы в ней во время своей работы перемещает в начало области. Соответственно, вторая часть области будет состоять только из пустого пространства и мёртвых an objectов. После этого сборщик мусора завершает свою работу.

  2. Перед уничтожение an object сборщиком мусора. Также можно вручную запустить вызовы этого метода у всех недостижимых an objectов, для этого надо вызвать метод System.runFinalization() or Runtime.getRuntime().runFinalization().

  3. Это исключение будет проигнорировано, и произойдёт выход из метода.

  4. SoftReference переводится How "мягкая link". Эта link на an object, но более слабая, чем обычная link (StrongReference). Объекты, на которые сущесвуют только мягкие ссылки, называются мягcodeостижимыми. Такие an objectы не уничтожаются в обычном случае. Но если у JVM закочиналась память, то сборщик мусоры удаляет все такие an objectы.

  5. WeakReference — это так называемая слабая link на an object. Она ещё слабее Soft-ссылки. Все an objectы, на которые существуют только слабые ссылки, будут удалены при ближайщей сборке мусора.

  6. PhantomReference — это самая слабая link. Механизм работы с такими link запускается только если на an object нет больше ниHowих других ссылок. Призрачные ссылки используются для сложной proceduresы удаления an object. Это может быть необходимо, если an object делает что за граница Java-машины, например, вызывает низкоуровневые функции ОС or пишет своё состояние в файл, or делает ещё что-то важное и сложное.

    Механизм работы с такими linkми следующий. Если на an object не осталось больше ниHowих других ссылок, и у него переопределён метода finalize(), то этот метода будет вызван во время ближащей сборки мусора. Если же этот метод не переопределён, то этот an object пропускает текущую сборку мусора, и попадает только в следующую. Во время этой (следующей) сборки мусора данный an object помещается в очередь призрачных an objectов, из которой будет удалён, когда у его призрачной ссылки вызовут метод clear(). Также стоит отметить, что метода get() у призрачной link всегда возвращает null (в отличие от двух других несильных ссылок, у которых он возвращает null, только если an object уже уничтожен).

  7. WeakHashMap — это HashMap, у которого ключами являются слабые ссылки. Поэтому, если во время ближайшей сборки мусора будет обнаружено, что на an object существует только link в WeakHashMap, то из WeakHashMap будет удалена вся пара "ключ-meaning", связанная с этим an objectом.

    В связи с этим данная коллекция может быть использована для хранения Howой-то дополнительной, не очень важной информации об an objectе. Также её удобно использоваться для хранения Howой-то временной информации (которая нужная только в рамках данной операции).

  8. Эта очередь используется для отслеживания того, что an object больше не нужен. Может быть использовано для закрытия ресурсов, открытых данным an objectом (например, удаление созданных файлов).

  9. דרוש לוגר כדי לשמור מידע על התנהגות התוכנית, כמו גם על חלק מהמצבים שלה. יכול לשמש לאיתור באגים וזיהוי שגיאות וכשלים בתוכנית. הלוגר גם מאפשר למפתח לקבל משוב מהתוכנית שלו בזמן שהיא פועלת. בנוסף, במקרה של כשלים קריטיים, לוגר יכול להודיע ​​במהירות לאנשים הנכונים (לדוגמה, מפתחים, לקוחות, מנהלי פרויקטים, תמיכה טכנית וכו') על כשלים אלו.

  10. בעת הגדרת רישום, אתה יכול לציין את הדברים הבאים:

    • המקום בו ייכתב המידע (קובץ, מסוף, מסד נתונים, רשת וכו')
    • באיזו רמה יוקלטו הודעות
    • סוג רשומות יומן
    • עבור קבצים אתה יכול לציין: נתיב לקובץ ולספרייה, גודל הקובץ, מספר הקבצים
    • ציין עבור כל חבילה בודדת את רמת ההודעות שלה שייכתבו ליומן
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION