JavaRush /Java блог /Random UA /Рівень 34. Відповіді на запитання до співбесіди на тему р...
lichMax
40 рівень
Санкт-Петербург

Рівень 34. Відповіді на запитання до співбесіди на тему рівня

Стаття з групи Random UA
Пошукав на сайті рідним пошуком і за допомогою гугла все облазив - немає відповідей на запитання з цього левела. Може я щось пропустив, і вони таки десь є тут на сайті!? Рівень 34. Відповіді на запитання до співбесіди на тему рівня - 1Про всяк випадок прикладаю відповіді, які я написав для себе: Запитання до співбесіди:
  1. Що таке збирання сміття?
  2. Коли викликається метод finalize?
  3. Що станеться, якщо у методі finalizeвиникне виняток?
  4. Що таке SoftReference?
  5. Що таке WeakReference?
  6. Що таке PhantomReference?
  7. Як працює WeakHashMap? Де використовується?
  8. Навіщо треба передавати чергу до конструктора PhantomReference?
  9. Навіщо потрібний логер?
  10. Які налаштування логера ви знаєте?
Мої відповіді:
  1. Це механізм винищення непотрібних об'єктів. Непотрібні об'єкти — це об'єкти, які не використовуються. Існує два способи пошуку таких об'єктів: підрахунок посилань та трасування. У першому випадку з кожним об'єктом пов'язується деяка змінна, яка зберігає кількість посилань на цей об'єкт. Якщо кількість опускається до нуля, то об'єкт вважається мертвим. У другому випадку збирач сміття йде за посиланнями об'єктів з кореневих точок до кінця (до значення нул), обминаючи все це дерево. Об'єкти, яких він не може дістатися з кореневих точок, вважаюся мертвими. Кореневими точками вважаються всі активні нитки, метод main, аргументи методу main(), а також усі статичні змінні класу, в якій знаходиться метод main().

    Визначення об'єктів, придатних до знищення – це перша частина роботи збирача сміття. Друга частина - це власне їхнє видалення та робота з пам'яттю. Тут використовується гібридний підхід. Вся доступна для об'єктів пам'ять поділяється на три області: область молодих об'єктів, область старих об'єктів і область перманентних об'єктів (це класи, метадані, рядки інтерновані і т.д.). Перша область розділяється ще на три підобласті: на Eden та suvivor space 1 і 2. У Eden зберігаються всі створені об'єкти. В решті двох зон зберігаються об'єкти, що вижабо після останнього складання сміття. Складальник сміття працює з усією цією областю (областю молодих об'єктів) в такий спосіб. Під час чергового складання сміття він знаходить живі об'єкти в області Eden і копіює їх у другу область тих, хто вижив. Після цього він у першій області також шукає живі об'єкти і копіює їх або в другу область тих, хто вижив, або якщо вони вже досить "старі" - область старого покоління. Після цього він очищає область Eden і першу область тих, хто вижив. Далі він вважає другу область тих, що вижабо першою. І все, на це складання сміття закінчується для цієї галузі.

    Для другої області складання сміття йде дещо по-іншому. Там є одна велика область, вона ні на що не ділиться, але збирач сміття усі живі об'єкти в ній під час своєї роботи переміщує на початок області. Відповідно, друга частина області складатиметься лише з порожнього простору та мертвих об'єктів. Після цього збирач сміття завершує свою роботу.

  2. Перед знищенням об'єкта збирачем сміття. Також можна вручну запустити дзвінки цього методу у всіх недосяжних об'єктів, для цього потрібно викликати метод System.runFinalization()або Runtime.getRuntime().runFinalization().

  3. Цей виняток буде проігноровано, і відбудеться вихід із методу.

  4. SoftReferenceперекладається як "м'яке посилання". Це посилання на об'єкт, але слабкіше, ніж звичайне посилання (StrongReference). Об'єкти, на які існують тільки м'які посилання, називаються м'якодосяжними. Такі об'єкти не знищуються у звичному випадку. Але якщо у JVM закочувалася пам'ять, то збирач сміття видаляє всі такі об'єкти.

  5. WeakReference- Це так зване слабке посилання на об'єкт. Вона ще слабша за Soft-посилання. Усі об'єкти, на які існують лише слабкі посилання, будуть видалені під час найближчого складання сміття.

  6. PhantomReference- Це найслабше посилання. Механізм роботи з такими посиланням запускається тільки якщо на об'єкт немає більше жодних інших посилань. Примарні посилання використовують для складної процедури видалення об'єкта. Це може бути необхідно, якщо об'єкт робить що за межі Java-машини, наприклад, викликає низькорівневі функції ОС або пише свій стан у файл, або робить ще щось важливе і складне.

    Механізм роботи з такими посиланнями є наступним. Якщо на об'єкт не залишилося більше жодних інших посилань, і у нього перевизначено методу finalize(), то цей метод буде викликаний під час найближчого складання сміття. Якщо цей метод не перевизначено, цей об'єкт пропускає поточну збірку сміття, і потрапляє лише у наступну. Під час цього (наступного) складання сміття даний об'єкт поміщається в чергу примарних об'єктів, з якої буде видалено, коли його примарне посилання викличе метод clear(). Також варто зазначити, що метод get()у примарної посилання завжди повертає null (на відміну від двох інших несильних посилань, у яких він повертає null, тільки якщо об'єкт вже знищений).

  7. WeakHashMap- Це HashMap, у якого ключами є слабкі посилання. Тому, якщо під час найближчого складання сміття буде виявлено, що на об'єкт існує тільки посилання в WeakHashMap, то WeakHashMapбуде видалена вся пара "ключ-значення", пов'язана з цим об'єктом.

    У зв'язку з цим колекція може бути використана для зберігання якоїсь додаткової, не дуже важливої ​​інформації про об'єкт. Також її зручно використовуватиметься для зберігання якоїсь тимчасової інформації (яка потрібна лише рамках цієї операції).

  8. Ця черга використовується для відстеження того, що об'єкт більше не потрібний. Може бути використане для закриття ресурсів, відкритих даним об'єктом (наприклад, видалення створених файлів).

  9. Логгер необхідний збереження інформації про поведінку програми, і навіть її станах. Може бути використаний для налагодження та виявлення помилок у роботі програми та збоїв. Також логгер дозволяє розробнику отримувати зворотний зв'язок від своєї програми під час її роботи. Крім того, при критичних збоях логер може оперативно сповіщати потрібних людей (наприклад, розробників, клієнтів, менеджерів проектів, службу техпідтримки тощо) про ці збої.

  10. При налаштуванні логгрування можна вказати такі речі:

    • місце, куди писатиметься інформація (файл, консоль, база даних, мережа тощо)
    • повідомлення якого рівня записуватимуться
    • вид записів у лозі
    • для файлів можна вказати: шлях до файлу та каталогу, розмір файлів, кількість файлів
    • вказати для кожного окремого пакета свій рівень повідомлень, які будуть писатись у лог
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ