🟠Heap (Куча)
Используется для динамического распределения памяти всех объектов и массивов. Разделена на молодое поколение (Young Generation) и старое поколение (Old Generation).
🟠Young Generation
Eden 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");
}
}Ставь 👍 и забирай 📚 Базу знаний