Библиотека собеса по Java | вопросы с собеседований
6.48K subscribers
433 photos
11 videos
712 links
Вопросы с собеседований по Java и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: clc.to/3wECtA

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Что такое escape analysis в JVM, и как она может повлиять на производительность?

Escape analysis — это оптимизация, применяемая JIT-компилятором, цель которой — выяснить, «убегает» ли объект за пределы метода или потока. Если анализ показывает, что объект используется только внутри метода (не передается наружу), JVM может:

аллоцировать его на стеке вместо кучи (stack allocation)

убрать синхронизацию (lock elision)

оптимизировать сборку мусора

Таким образом уменьшается нагрузка на GC и накладные расходы на синхронизацию.

🐸 Библиотека собеса по Java

#jvm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥2👏1
Что такое soft reference, weak reference, phantom reference?

Это разные виды ссылок на объекты из java.lang.ref:

🔹 SoftReference — объекты могут быть удалены GC при нехватке памяти, но склонны дожидаться недостатка памяти. Часто используют для кешей.

🔹 WeakReference — объекты удаляются при следующей сборке, если нет сильных ссылок. Используется, например, для слабых ссылок в картах (WeakHashMap).

🔹 PhantomReference — всегда считается недостижимым, даже если есть phantom-ссылка. Используется, чтобы узнать, что объект уже завершил финализацию, и подготовиться к освобождению ресурсов.

🐸 Библиотека собеса по Java

#jvm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥4👏1
Разница StackOverflowError и OutOfMemoryError?

— StackOverflowError

Возникает когда переполняется стек вызовов конкретного потока. Обычно из-за бесконечной или слишком глубокой рекурсии.

— OutOfMemoryError

Возникает когда JVM не может выделить память в куче (heap) для новых объектов. Это проблема всего приложения, а не отдельного потока.

🐸 Библиотека собеса по Java

#jvm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥21
Что такое Phantom Reference и зачем она нужна?

PhantomReference — самая слабая ссылка в Java. Отличается от WeakReference тем, что get() всегда возвращает null.

Используется для отслеживания момента, когда объект удалён из памяти. После удаления объекта PhantomReference помещается в ReferenceQueue.

В отличие от finalize(), это надёжный способ отследить удаление объекта. Используется редко, в основном во внутренних механизмах или для управления off-heap памятью.

🐸 Библиотека собеса по Java

#jvm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥2👏2
Что такое WeakReference и когда её использовать?

WeakReference — это слабая ссылка на объект, которая не препятствует его удалению сборщиком мусора.

Если на объект есть только weak references, GC может удалить его при нехватке памяти.

WeakReference<Data> weak = new WeakReference<>(data);
data = null;
// GC может удалить объект
Data retrieved = weak.get(); // может вернуть null


Используется в кешах (WeakHashMap), где элементы могут быть удалены при нехватке памяти, или для предотвращения memory leaks в listeners.

🐸 Библиотека собеса по Java

#jvm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍102🔥2👏2
Что такое Garbage Collection Roots?

GC Roots — это отправные точки для поиска живых объектов сборщиком мусора.

К GC Roots относятся:

локальные переменные в стеке активных методов
статические переменные
активные потоки
JNI ссылки

GC начинает с roots и проходит граф объектов. Всё, что недостижимо из roots — мусор, подлежит удалению.

🐸 Библиотека собеса по Java

#jvm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91🔥1
Что такое Phantom Reference?

PhantomReference — самая слабая ссылка в Java. Отличается от WeakReference тем, что get() всегда возвращает null.

Используется для отслеживания момента, когда объект удалён из памяти. После удаления объекта PhantomReference помещается в ReferenceQueue.

В отличие от finalize(), это надёжный способ отследить удаление объекта. Используется редко, в основном во внутренних механизмах или для управления off-heap памятью.

🐸 Библиотека собеса по Java

#jvm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81🔥1👏1
Что такое WeakReference?

WeakReference — это слабая ссылка на объект, которая не препятствует его удалению сборщиком мусора.

Если на объект есть только weak references, GC может удалить его при нехватке памяти.

WeakReference<Data> weak = new WeakReference<>(data);
data = null;
// GC может удалить объект
Data retrieved = weak.get(); // может вернуть null


Используется в кешах (WeakHashMap), где элементы могут быть удалены при нехватке памяти, или для предотвращения memory leaks в listeners.

🐸 Библиотека собеса по Java

#jvm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61🔥1🤔1
Что такое escape analysis и какие оптимизации он даёт?

Это анализ JIT-компилятора, который определяет, «убегает» ли объект за пределы метода или потока.

Если объект создаётся и используется только локально и наружу не уходит, JVM может:

→ Scalar replacement — вообще не создавать объект в куче, а разложить его на отдельные поля в регистрах/на стеке. Это снимает нагрузку на GC.
→ Lock elision — убрать синхронизацию, если объект гарантированно не виден другим потокам.


🐸 Библиотека собеса по Java

#jvm
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍32