🤔
Расскажи про области памяти и Garbage Collector? 🟠
Heap (Куча)Используется для динамического распределения памяти всех объектов и массивов. Разделена на молодое поколение (Young Generation) и старое поколение (Old Generation).
🟠
Young GenerationEden Space: Новые объекты сначала создаются здесь. Survivor Spaces (S0 и S1): Объекты, которые пережили сборку мусора в Eden Space, перемещаются сюда.
🟠
Old GenerationСодержит долгоживущие объекты, которые пережили несколько сборок мусора в Young Generation.
🟠
PermGen (Permanent Generation)Используется для хранения метаданных классов и методов. В Java 8 заменена на
Metaspace, которая выделяется из внеheap-памяти и автоматически увеличивается по мере необходимости.
🟠
Stack (Стек)Содержит фреймы для каждого метода, который выполняется в потоке. Каждый фрейм включает локальные переменные, параметры метода и другие данные.
🚩
Garbage Collector (GC)
Это автоматический механизм управления памятью, который освобождает память, занятую объектами, которые больше не используются.
🟠
Minor GC (Малый сбор мусора)Очищает Young Generation. Быстрая и частая сборка мусора.
🟠
Major GC (Большой сбор мусора) или
Full GCОчищает Old Generation и, возможно, всю кучу. Медленнее, так как затрагивает больше объектов.
🚩
Алгоритмы Garbage Collector
🟠
Serial GCИспользует один поток для сборки мусора. Подходит для небольших приложений или одноядерных систем.
🟠
Parallel GC (или Throughput GC)
Использует несколько потоков для ускорения сборки мусора. Хорошо подходит для многопроцессорных систем.
🟠
CMS (Concurrent Mark-Sweep) GCВыполняет сборку мусора одновременно с выполнением приложения. Минимизирует паузы, но требует больше ресурсов.
🟠
G1 (Garbage First) GCДелит кучу на регионы и выполняет сборку мусора по регионам. Минимизирует паузы и обеспечивает предсказуемую производительность.
🚩
Пример настройки GC
Вы можете настроить JVM для использования конкретного сборщика мусора и управлять его параметрами с помощью аргументов командной строки.
java -XX:+UseG1GC -Xms512m -Xmx2g MyApplication
Хотя сборка мусора в Java автоматизирована, можно явным образом вызывать сборку мусора, используя
System.gc(). Однако это лишь рекомендация для JVM, и она не обязана немедленно выполнять сборку мусора.
public class GarbageCollectorExample {
public static void main(String[] args) {
// Создание объекта
String str = new String("Hello, World!");
// Обнуление ссылки, объект становится доступным для сборки мусора
str = null;
// Явный вызов сборки мусора (не рекомендуется использовать в продакшн-коде)
System.gc();
System.out.println("Garbage Collector called");
}
}Ставь 👍 и забирай 📚 Базу знаний