METANIT.COM
6.24K subscribers
1.79K photos
86 videos
10 files
1.26K links
Канал о программировании и разработке сайта metanit.com
Download Telegram
Управление памятью Java: Сборка мусора

𝟏) Что такое сборка мусора
Сборка мусора (GC) — это автоматизированный процессдля освобождения памяти путем удаления объектов, которые больше не нужны или на которые не ссылается приложение. Это помогает предотвратить утечки памяти и обеспечивает эффективную работу приложения.

𝟐) Как она работает?
В основе сборки мусора в Java лежит алгоритм Mark and Sweep (отметить и убрать):

🔹𝗠𝗮𝗿𝗸: GC начинает с корневых ссылок (таких как статические переменные, активные потоки и стеки методов) и помечает все достижимые объекты как «используемые».
🔹𝗦𝘄𝗲𝗲𝗽: Затем GC сканирует кучу на предмет объектов, не помеченных как «используемые», и освобождает их память, делая ее доступной для новых выделений.

𝟑) Когда выполняется сборка мусора?
Сборщик мусора может быть запущен автоматически JVM в следующих случаях:
🔹 Куча заполнена или близка к заполнению.
🔹 Куча старого поколения достигает порога.
🔹 Область памяти PermGen/Metaspace заполнена (в зависимости от версии Java).
🔹 Вручную вызван метод System.gc()

𝟒) Сборка мусора для поколений
Современные JVM делят кучу на поколения (молодые, старые и иногда ряд других). Большинство объектов умирают молодыми, поэтому GC фокусируется на молодом поколении для частой и быстрой очистки, в то время как старые объекты собираются реже, но более тщательно.

𝟓) Оптимизация
После очистки некоторые сборщики уплотняют память, перемещая активные объекты вместе, что снижает фрагментацию и ускоряет выделение памяти для новых объектов.

𝟔) Почему это важно?
Автоматическая сборка мусора освобождает разработчиков от ручного управления памятью (в отличие от C/C++), уменьшая количество ошибок, таких как утечки памяти и висячие указатели, и позволяя вам сосредоточиться на создании функций, а не на отслеживании памяти.

#java
👍16🔥53
Сообщество Eclipse представило платформу Jakarta EE 11, которая предназначена для разработки корпоративных Java-приложений и которая пришла на смену Java EE.
Основной акцент сделан на повышении производительности разработчиков, оптимизации процессов тестирования и поддержке последних версий Java LTS (Java 17 и 21).
Ключевые особенности релиза включают:

- Для упрощения работы с данными добавлена новая спецификация Jakarta Data, которая предоставляет ряд интерфейсов: BasicRepository (для базовых операций с данными, минимизирующий шаблонный код), CrudRepository (для поддержки полного набора CRUD-операций для интуитивного взаимодействия с базами данных),
Pagination (для поддержки постраничной навигации (offset и cursor-based) для эффективной работы с большими наборами данных) и упрощённый язык для определения запросов на уровне методов в репозиториях.

- Модернизация Test Compatibility Kit (TCK): Обновлённые тестовые наборы с использованием JUnit 5 и Maven повышают удобство и гибкость тестирования, снижая барьеры для новых участников и способствуя инновациям в экосистеме Jakarta EE.

- Добавлена поддержка Java 21, в том числе таких возможностей, как виртуальные потоки (Virtual Threads), которые повышают масштабируемость и производительность за счёт снижения накладных расходов.

Ряд продуктов уже поддерживают данную спецификацию, в частности, Eclipse GlassFish (Web Profile), Open Liberty, WildFly, Payara Platform Community Edition и Fujitsu Software Enterprise Application Platform (Core Profile)

https://newsroom.eclipse.org/news/announcements/eclipse-foundation%E2%80%99s-jakarta-ee-working-group-announces-jakarta-ee-11-release
#java #jakarta_ee
6👀3❤‍🔥2👏1
Вкратце все версии Java/JDK #java
👍15
В руководство по языку Java добавлены новые статьи:

Файлы JAR, их создание и выполнение
http://metanit.com/java/tutorial/13.1.php

Создание и подключение библиотеки JAR
http://metanit.com/java/tutorial/13.2.php

Установка пути к классам Java
http://metanit.com/java/tutorial/13.3.php

#java
🔥19👍4👏1
В руководство по языку Java добавлены новые статьи:

Sealed-классы и интерфейсы
https://metanit.com/java/tutorial/3.25.php"

Pattern мatching. Паттерн типов
https://metanit.com/java/tutorial/3.26.php"

Pattern мatching. record-паттерн
https://metanit.com/java/tutorial/3.27.php"

#java
🔥22
В руководство по языку Java добавлена глава про Рефлексию
https://metanit.com/java/tutorial/14.1.php
#java
🔥23👍3👏2
В руководство по языку Java добавлена статья про Виртуальные потоки
https://metanit.com/java/tutorial/8.12.php
#java
🔥186👍2❤‍🔥1🥰1🤮1
В руководство по языку Java добавлены новые статьи:

Асинхронные задачи FutureTask. Callable и Future
https://metanit.com/java/tutorial/8.13.php

Executor - исполнитель задач
https://metanit.com/java/tutorial/8.14.php

Координация выполнения асинхронных задач
https://metanit.com/java/tutorial/8.15.php

#java
❤‍🔥13👍4🔥2
В руководство по языку Java добавлены новые статьи:

Переменные volatile в многопоточных приложениях
https://metanit.com/java/tutorial/8.16.php

Атомарность и Atomics. Потокобезопасность без блокировок в многопоточных приложениях
https://metanit.com/java/tutorial/8.17.php

#java
👍22👾3
В руководство по языку Java добавлены следующие статьи:

Управление процессами. Классы Process и ProcessBuilder
https://metanit.com/java/tutorial/12.4.php

CompletableFuture и промисы. Обработка результата асинхронных задач
https://metanit.com/java/tutorial/8.18.php

CompletableFuture, обработка ошибок и завершения асинхронных задач
https://metanit.com/java/tutorial/8.19.php

#java


В руководство по ассемблеру NASM добавлена статья

Создание структур с помощью макросы STRUC/ENDSTRUC
https://metanit.com/assembler/nasm/3.13.php

#assembler #assembly #nasm
😁74👍4🍓4💋3👏1
В руководство по языку Java добавлена глава по аннотациям: их объявлению и применению, созданию своих аннотаций и использованию встроенных
https://metanit.com/java/tutorial/15.1.php
#java
🔥12👍6👏2
Вышла новая версия Spring - распространенного фрейморка для создания корпоративных приложений на Java/Kotlin - Spring Framework 7.0
В сообщении о релизе отмечается, что Spring Framework 7.0 — это начало нового поколения фреймворка. Его ключевые ориентиры — Java 25 и новейшая экосистема с открытым исходным кодом. Фреймворк станет основой для Spring Boot 4.0.

Это поколение Spring включает обновление базовых компонентов и зависимостей:

* поддержка Java 25 (последняя версия с долгосрочной поддержкой) при сохранении базовой версии Java 17;
* уровень API Jakarta EE 11: Servlet 6.1, JPA 3.2, Bean Validation 3.1;
* комплексная защита от null‑значений с помощью JSpecify;
* поддержка Jackson 3.0 (при этом сохраняется устаревшая поддержка Jackson 2.x);
* Kotlin 2.2;
* JUnit 6.0.

Первый релиз Spring Framework 7.0 содержит широкий набор новых функций, в том числе:

* программную регистрацию бинов;
* базовые функции обеспечения отказоустойчивости;
* JmsClient;
* версионирование API;
* настройку клиента HTTP‑интерфейса;
* RestTestClient.

https://spring.io/blog/2025/11/13/spring-framework-7-0-general-availability/

#spring #java #kotlin
6👍5🤔2👀2😁1
Как работает сборщик мусора (Garbage Collector) в Java #java
(продолжение в следующем посте)
5🔥2👏1💩1
Как работает сборщик мусора (Garbage Collector) в Java #java
(продолжение предыдущего поста)

Java использует систему автоматического управления памятью, которая называется сборщиком мусора (Garbage Collector, GC). Она освобождает память, занятую объектами, которые больше не нужны. Это помогает предотвратить утечки памяти и обеспечивает эффективную работу приложений.

Во время выполнения программы:

→ Виртуальная машина Java (JVM) постоянно отслеживает ссылки на объекты, чтобы определить, какие из них всё ещё доступны из активных потоков и исполняемого кода.
→ Объекты, к которым больше нет доступа, помечаются как подходящие для сборки мусора.
→ Сборщик мусора использует такие алгоритмы, как «Маркировка и очистка» (Mark‑and‑Sweep), «Копирование» (Copying) и «Поколение» (Generational Collection), чтобы выявить неиспользованные объекты и освободить занятую ими память.
→ Молодое поколение (Young Generation) часто обрабатывается с помощью быстрых и эффективных циклов малой сборки мусора (minor GC).
→ Объекты, пережившие несколько циклов, перемещаются в старое поколение (Old Generation), где с долгоживущими объектами работают циклы основной сборки мусора (major GC).
→ После очистки сборщик мусора уплотняет память, чтобы уменьшить фрагментацию и повысить производительность при выделении памяти.
→ Весь процесс выполняется автоматически, позволяя разработчикам на Java сосредоточиться на написании кода без ручного освобождения памяти.

Результат: Java обеспечивает стабильное и эффективное использование памяти, автоматически обнаруживая неиспользованные объекты и освобождая занятое ими пространство посредством оптимизированных циклов сборки мусора.
11🔥2🥰1
В руководство по языку Java добавил главу про Взаимодействие с нативным кодом с помощью JNI и Foreign Functions и Memory API
https://metanit.com/java/tutorial/16.1.php
#java
🔥15👍5👏1