ru
Feedback
Библиотека Java разработчика

Библиотека Java разработчика

Открыть в Telegram

📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP

Больше

📈 Аналитический обзор Telegram-канала Библиотека Java разработчика

Канал Библиотека Java разработчика (@bookjava) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 10 278 подписчиков, занимая 12 030 место в категории Технологии и приложения и 63 913 место в регионе Россия.

📊 Показатели аудитории и динамика

С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 10 278 подписчиков.

Согласно последним данным от 05 июня, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило 20, а за последние 24 часа — 0, при этом общий охват остаётся высоким.

  • Статус верификации: Не верифицирован
  • Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 8.29%. В первые 24 часа после публикации контент обычно набирает 3.77% реакций от общего числа подписчиков.
  • Охват публикаций: В среднем каждый пост получает 852 просмотров. В течение первых суток публикация набирает 388 просмотров.
  • Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 6.
  • Тематические интересы: Контент сосредоточен на ключевых темах, таких как string, интерфейс, строка, boot, api.

📝 Описание и контентная политика

Автор описывает ресурс как площадку для выражения субъективного мнения:
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP

Благодаря высокой частоте обновлений (последние данные получены 07 июня, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.

10 278
Подписчики
Нет данных24 часа
+27 дней
+2030 день
Архив постов
🚀 Пишем эффективные SQL-запросы в Hibernate: ТОП ошибок и их исправление Сегодня поговорим о распространенных ошибках при работе с Hibernate и SQL-запросами. Многие из них приводят к проблемам с производительностью, искаженными данными и даже утечкам памяти. ❌ Ошибка №1: Избыточные запросы (N+1 Problem) _Проблема:_ Если загружать список сущностей и затем получать связанные данные в цикле, Hibernate будет делать отдельный SQL-запрос для каждой записи. _Пример:_

List<User> users = session.createQuery("FROM User", User.class).getResultList();
for (User user : users) {
    System.out.println(user.getOrders().size()); // Генерирует N дополнительных запросов!
}
Решение: Используйте JOIN FETCH для загрузки связанных данных одним запросом:

List<User> users = session.createQuery(
    "SELECT u FROM User u JOIN FETCH u.orders", User.class).getResultList();
❌ Ошибка №2: Использование LIKE без индексов _Проблема:_ Запросы вида LIKE '%value%' приводят к полному сканированию таблицы, что критично для больших баз данных. _Пример:_

SELECT * FROM users WHERE username LIKE '%john%';
Решение: 1. Используйте полнотекстовый поиск (например, PostgreSQL full-text search или **Elasticsearch**). 2. Если всё же нужен LIKE, постарайтесь использовать его в виде value%, чтобы индексы работали. ❌ Ошибка №3: Неиспользование batch_size для @OneToMany _Проблема:_ Если у вас коллекция @OneToMany, Hibernate может загружать каждый элемент отдельным запросом. ✅ Решение: Включаем batch_size, чтобы загружать данные пакетами:

@OneToMany(mappedBy = "user")
@BatchSize(size = 10)
private List<Order> orders;
Либо добавляем глобально в hibernate.cfg.xml:

<property name="hibernate.default_batch_fetch_size">10</property>
❌ Ошибка №4: Неограниченный размер выборки (LIMIT отсутствует) _Проблема:_ Запрос без LIMIT может возвращать тысячи строк, нагружая базу и приложение. ✅ Решение: Всегда указываем LIMIT или используем setMaxResults():

Query<User> query = session.createQuery("FROM User", User.class);
query.setMaxResults(50); // Ограничиваем выборку
List<User> users = query.getResultList();
🏆 Вывод Проблемы с Hibernate и SQL встречаются часто, но их можно легко избежать! Следите за запросами и используйте JOIN FETCH, индексы, batch_size и LIMIT, чтобы повысить производительность. А какие проблемы с Hibernate встречались вам? Делитесь в комментариях! 👇 👉@BookJava

⚡️ Квиз на знание Java Пройти тестирование — сложно! А ты справишься? 21 вопрос, 30 минут Проверь себя - пройди квиз и оцени
⚡️ Квиз на знание Java Пройти тестирование — сложно! А ты справишься? 21 вопрос, 30 минут Проверь себя - пройди квиз и оцени свой уровень навыков, а также свою готовность к обучению на курсе — «Разработчик на Spring Framework» от OTUS. 💻 За 5 месяцев обучения ты освоишь современные возможности Spring, научишься быстро проходить путь от идеи до production-grade, создавать Web-приложения на микросервисной архитектуре и решать высокоуровневые задачи по разработке. 👉 ПРОЙТИ ТЕСТ: https://vk.cc/cJotoa Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

📌 Spring Boot: Как использовать @Async и не напороться на проблемы? Сегодня я расскажу вам, как правильно использовать аннотацию @Async в Spring Boot, чтобы асинхронные задачи работали стабильно и без неожиданностей. 🔹 Что делает @Async? Эта аннотация позволяет выполнять методы в отдельном потоке, не блокируя основной поток приложения. Это удобно, когда нужно, например, отправить email или выполнить сложный расчет без задержки ответа пользователю. 🔹 Как правильно использовать? 1️⃣ Включите поддержку асинхронности Добавьте в главный класс Spring Boot: @EnableAsync @SpringBootApplication public class MyApplication { } 2️⃣ Аннотируйте метод в сервисе @Service public class EmailService { @Async public void sendEmail(String email) { System.out.println("Отправка email: " + email + " в потоке " + Thread.currentThread().getName()); } } 3️⃣ Вызывайте метод асинхронно @Component public class NotificationSender { private final EmailService emailService; public NotificationSender(EmailService emailService) { this.emailService = emailService; } public void notifyUser(String email) { emailService.sendEmail(email); System.out.println("Метод notifyUser выполняется в потоке " + Thread.currentThread().getName()); } } 🔹 Частые ошибки и их решенияВызываете асинхронный метод внутри того же класса? Spring не будет проксировать вызов, и @Async просто не сработает. Выносите метод в отдельный бин! ❌ Нет пула потоков? По умолчанию Spring использует SimpleAsyncTaskExecutor, который создает новый поток для каждой задачи. Это может перегрузить систему. Лучше явно указать пул: @Configuration @EnableAsync public class AsyncConfig { @Bean public Executor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(5); executor.setMaxPoolSize(10); executor.setQueueCapacity(100); executor.initialize(); return executor; } } 💡 Вы используете @Async в своем проекте? Какие были подводные камни? Делитесь в комментариях! 👉@BookJava

⚖️ 👩‍💻 Сравнение механизмов синхронизации потоков с помощью JMH Понимание синхронизации — ключ к многопоточности. Оцените э
⚖️ 👩‍💻 Сравнение механизмов синхронизации потоков с помощью JMH Понимание синхронизации — ключ к многопоточности. Оцените эффективность механизмов и проверьте гипотезы с помощью JMH. 🗓 13 марта в 20:00 МСК 🆓 Бесплатно. Урок в рамках старта курса «Java Developer. Advanced». 📌О чём поговорим: - Ключевые механизмы синхронизации в Java (synchronized, ReentrantLock и другие). - Особенности их применения в многопоточном коде и влияние на производительность. - Настройка и проведение бенчмарков JMH для объективного сравнения различных подходов. 📌Кому будет интересно: Java-разработчикам, инженерам по производительности и любителям многопоточности, желающим оценить скорость и надёжность разных механизмов. 📌В результате урока вы получите: - Навык реализации JMH-бенчмарков для сравнения различных инструментов синхронизации. - Понимание разницы в скорости работы механизмов и уверенность в выборе оптимального решения. 🔗 Ссылка на регистрацию: https://vk.cc/cJlnn7 Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Совет по Spring Boot 💡 Если вы используете DTO в Spring Data/JPA, вы можете автоматизировать отображение между сущностями и
Совет по Spring Boot 💡 Если вы используете DTO в Spring Data/JPA, вы можете автоматизировать отображение между сущностями и DTO с помощью библиотеки Blaze Persistence (https://persistence.blazebit.com). Тогда вы сможете воспользоваться преимуществами, например, паттерна Spring repository. 👉@BookJava

🏆 5 ЗОЛОТЫХ ПРАВИЛ ЧИСТОГО КОДА В JAVA 1️⃣ Понятные названия Используйте осмысленные имена для переменных, методов и классов. Название должно отвечать на вопрос "Что делает этот код?" без необходимости заглядывать внутрь. ❌ int a = 5;int maxRetries = 5; 2️⃣ Короткие методы Огромные методы с кучей логики сложно читать и поддерживать. Разбивайте их на мелкие, понятные части. Хороший метод делает только одну вещь и делает её хорошо. 3️⃣ Минимум вложенности Чем больше if-else и циклов внутри друг друга — тем сложнее понимать код. Используйте ранний выход (return, continue, break), чтобы уменьшить вложенность. 4️⃣ Избегайте магических чисел Никогда не вставляйте числа или строки прямо в код. Заводите константы. ❌ if (status == 3) {...}if (status == ORDER_COMPLETED) {...} 5️⃣ Отказ от комментариев в пользу читаемого кода Комментарий не должен объяснять что делает код — это обязанность самого кода! Если без комментариев неясно, что происходит, значит, нужно переписать код. 👉 Какое из этих правил вы чаще всего нарушаете? Или, может, у вас есть своё золотое правило чистого кода? Пишите в комментариях! 👉@BookJava

⁉️ По-прежнему перебираете списки с for и while? Код превращается в кашу из циклов и условий? Оптимизация занимает больше вре
⁉️ По-прежнему перебираете списки с for и while? Код превращается в кашу из циклов и условий? Оптимизация занимает больше времени, чем сам проект? 👩‍💻 Stream API — мощный инструмент, который позволит вам писать элегантный, лаконичный и производительный код. ⚡️ На открытом вебинаре 13 марта в 20:00 мск разберём ключевые операции Stream API, научимся фильтровать, группировать и трансформировать данные в несколько строк кода. 🎙 Спикер Александр Фисунов — Senior Kotlin Developer в SSP Software на проекте ВТБ, опытный Java-разработчик и кандидат технических наук. Участники вебинара получат скидку для обучение на курсе «Java-разработчик» 🔗 Ссылка на регистрацию: https://vk.cc/cJjAao Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

🔥 Почему Optional в Java – не просто контейнер! Сегодня разберём важную тему: Optional в Java – это не просто удобный способ избежать null, но и мощный инструмент для работы с потоками данных. 🚀 Как правильно использовать Optional? 1️⃣ Избегаем null-чеков Раньше код был полон if (obj != null), но теперь:

Optional<String> name = Optional.ofNullable(user.getName());
name.ifPresent(System.out::println);
Это делает код чище и понятнее. 2️⃣ Комбинируем с map() и flatMap() Если у нас есть объект, внутри которого другой объект, а внутри него – ещё один, Optional поможет избежать вложенных if-else:

Optional<String> city = Optional.ofNullable(user)
    .map(User::getAddress)
    .map(Address::getCity);
Всё элегантно и лаконично! 3️⃣ Используем orElse() и orElseGet() правильноАнтипаттерн – всегда выполняет new Object():

User user = optionalUser.orElse(new User());
Лучше такorElseGet() вызовется только если optionalUser пуст:

User user = optionalUser.orElseGet(User::new);
Это особенно важно, если объект тяжёлый в создании. 4️⃣ orElseThrow() – избавляемся от null вообще Когда отсутствие значения – это ошибка, не бойтесь выбрасывать исключение:

User user = optionalUser.orElseThrow(() -> new RuntimeException("User not found"));
Это делает код безопаснее! ❌ Когда не стоит использовать Optional? - В полях сущностей (например, JPA) – это может ухудшить производительность. - Для коллекций – лучше возвращать пустую коллекцию, а не Optional<List<T>>. А как ты используешь Optional в своём коде? Делись в комментариях! 👇 👉@BookJava

🔍Что спрашивают на собеседовании у Middle Java-разработчика❔ Уже завтра, 5 марта в 19:00 мск — бесплатное открытое собеседов
🔍Что спрашивают на собеседовании у Middle Java-разработчикаУже завтра, 5 марта в 19:00 мск — бесплатное открытое собеседование в прямом эфире! Интервьюер Алексей Ушаровский (Oracle, Сбер) задаст реальные вопросы разработчику-добровольцу и разберёт его ответы. В конце — время вопросов ментору из зала. Что узнаешь на эфире: 📂 Какие вопросы задают на собеседованиях и зачем 📂 Как подготовиться, чтобы получить достойный оффер 📂 Чего ждут от кандидатов на Middle Java Запишись на эфир в боте ШОРТКАТ → @shortcut_sh_bot

Утренний рефакторинг с Дженной Ортегой* На относительно простом примере показываю как можно сделать программу «снова великой»
Утренний рефакторинг с Дженной Ортегой* На относительно простом примере показываю как можно сделать программу «снова великой». Ключевые стадии рефакторинга, Java, эмулятор и Jenna Ortega в нейросетевом исполнении. https://habr.com/ru/articles/886890/ 👉@BookJava

⚡️ Кастомный toString() в Java – как сделать правильно? Сегодня поговорим про метод toString() в Java. Казалось бы, мелочь, но грамотная реализация этого метода значительно упрощает отладку и логирование. ❌ Как делать НЕ стоит Обычная ошибка – использовать toString() по умолчанию или писать его вручную без четкой структуры:

public class User {
    private String name;
    private int age;

    // Ошибочный вариант
    @Override
    public String toString() {
        return "User[name=" + name + ", age=" + age + "]";
    }
}
Минусы такого подхода: - Код громоздкий и трудно читаемый - При добавлении новых полей легко забыть их добавить в toString() - Нет удобного форматирования ✅ Как делать правильно Лучший вариант – использовать String.format() или StringJoiner, но ещё лучше – библиотеку Lombok или Objects.toString():

import lombok.ToString;

@ToString
public class User {
    private String name;
    private int age;
}
Или без Lombok, но читабельно:

import java.util.Objects;

public class User {
    private String name;
    private int age;

    @Override
    public String toString() {
        return String.format("User{name='%s', age=%d}", name, age);
    }
}
Плюсы: - Автоматически форматируется - Читаемый и поддерживаемый код - Легко расширять Используйте toString() осознанно, и ваш код станет лучше! Какой способ используете вы? 👉@BookJava

Используем Lombok правильно: Разбираемся с @Slf4j Сегодня я расскажу вам о @Slf4j из библиотеки Lombok и о том, как его правильно использовать, чтобы ваш код стал чище и удобнее. Что такое @Slf4j? Это аннотация, которая добавляет в ваш класс статическое поле логгера org.slf4j.Logger. Вместо того чтобы писать:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyService {
    private static final Logger log = LoggerFactory.getLogger(MyService.class);
}
Достаточно одной аннотации:

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class MyService {
}
Теперь в коде можно просто писать:

log.info("Приложение запущено");
log.error("Произошла ошибка: {}", exception.getMessage());
На что обратить внимание? 1️⃣ @Slf4j использует SLF4J API, поэтому вам все равно потребуется подключить реализацию логирования, например Logback:

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.11</version>
</dependency>
2️⃣ Если нужен другой логгер, можно использовать альтернативные аннотации: - @Log — для java.util.logging - @Log4j — для Apache Log4j - @Log4j2 — для Log4j2 3️⃣ Не забывайте про уровень логирования! Используйте debug для отладки, info для полезных сообщений, warn для предупреждений и error для ошибок. Вывод: @Slf4j — это удобный инструмент, который избавляет от лишнего кода и упрощает работу с логированием. Если вы еще не используете Lombok для логирования, самое время попробовать! 👉@BookJava

🦾👩‍💻Хардкорный тест по языку Java👩‍💻🦾 👩‍💻 Пройдите тест из 21 вопроса и проверьте, насколько вы готовы к обучению на
🦾👩‍💻Хардкорный тест по языку Java👩‍💻🦾 👩‍💻 Пройдите тест из 21 вопроса и проверьте, насколько вы готовы к обучению на углубленном курсе «Разработчик на Spring Framework» от OTUS. Сможете сдать - пройдете на курс по спеццене! 💻 За 5 месяцев обучения вы освоите современные возможности Spring, научитесь быстро проходить путь от идеи до production-grade, создавать Web-приложения на микросервисной архитектуре и решать высокоуровневые задачи по разработке. ⏰ Время прохождения теста ограничено 30 минут 👉 ПРОЙТИ ТЕСТ: https://vk.cc/cJ4GlS Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

🚀 Используем Optional правильно в Java Сегодня разберем Optional – мощный инструмент, который помогает избежать NullPointerException. Но многие используют его неправильно! Давайте посмотрим, как его применять эффективно. ❌ Как делать НЕ надо:

Optional<String> optional = Optional.ofNullable(getValue());
if (optional.isPresent()) {
    System.out.println(optional.get());
}
Почему плохо? - get() без проверки – потенциальная ловушка. - Лишний if – можно сделать проще. ✅ Как надо:

Optional.ofNullable(getValue()).ifPresent(System.out::println);
или, если нужно значение по умолчанию:

String value = Optional.ofNullable(getValue()).orElse("Default Value");
Крутые приемы с Optional: ✔ orElseGet – лениво вычисляет значение ✔ orElseThrow – выбрасывает исключение, если Optional пуст ✔ map и flatMap – позволяют трансформировать данные 🔥 Советы: 1️⃣ Не используйте Optional для полей классов – это не сериализуемо. 2️⃣ Не передавайте Optional в аргументах методов – это антипаттерн. 3️⃣ Optional хорош для возвращаемых значений – используйте его вместо null. Как вы используете Optional в своих проектах? Делитесь в комментариях! 👉@BookJava

Дикая Java «Безопасный язык» говорили они, «четкая спецификация» говорили они, «Java не даст вам выстрелить себе в ногу» и пр
Дикая Java «Безопасный язык» говорили они, «четкая спецификация» говорили они, «Java не даст вам выстрелить себе в ногу» и прочее в таком духе. Реальность же оказалась куда веселее официальной документации и мнений экспертов. «JVM темна и полна ужасов». (ц) https://habr.com/ru/articles/886080/ 👉@BookJava

⚡️ Квиз на знание Java Пройти тестирование — сложно! А ты справишься? 22 вопроса, 30 минут Проверь себя - пройди квиз и оцени
⚡️ Квиз на знание Java Пройти тестирование — сложно! А ты справишься? 22 вопроса, 30 минут Проверь себя - пройди квиз и оцени свой уровень навыков, а также свою готовность к обучению на курсе — «Java Developer. Advanced» от Отус. 👩‍💻 На курсе ты научишься профилировать приложения, настраивать GC, работать с реактивными подходами и мониторить метрики в Grafana. Пройдешь весь путь от JVM до Kubernetes, научишься анализировать «горячие точки», оптимизировать приложения и настраивать интеграции с Prometheus. ➡️ ПРОЙТИ ТЕСТ: https://vk.cc/cIZDax Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

🧵 Разбираемся с CompletableFuture в Java Сегодня я хочу рассказать вам про CompletableFuture — мощный инструмент для работы
🧵 Разбираемся с CompletableFuture в Java Сегодня я хочу рассказать вам про CompletableFuture — мощный инструмент для работы с асинхронными операциями в Java. Если вам приходилось ждать выполнения долгих задач в коде и хотелось бы улучшить производительность, то этот пост для вас! 🚀 🔹 Что такое CompletableFuture? CompletableFuture — это часть java.util.concurrent с Java 8, которая позволяет выполнять асинхронные задачи и удобно комбинировать их. В отличие от обычного Future, CompletableFuture поддерживает цепочки вызовов, композицию задач и обработку ошибок. 🔹 Пример использования Допустим, у нас есть сервис, который загружает данные по сети. Обычный подход синхронного вызова будет блокировать поток, но с CompletableFuture мы можем избежать этого:

import java.util.concurrent.CompletableFuture;

public class CompletableFutureExample {
    public static void main(String[] args) {
        CompletableFuture.supplyAsync(() -> {
            System.out.println("Загружаем данные...");
            sleep(2000);
            return "Данные загружены";
        }).thenApply(data -> {
            System.out.println("Обрабатываем: " + data);
            return data.toUpperCase();
        }).thenAccept(System.out::println)
          .exceptionally(ex -> {
              System.out.println("Ошибка: " + ex.getMessage());
              return null;
          });

        sleep(3000); // Даем время асинхронной операции завершиться
    }

    private static void sleep(long millis) {
        try {
            Thread.sleep(millis);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
🔹 Разбор кода 1️⃣ supplyAsync() — запускает асинхронную задачу в отдельном потоке. 2️⃣ thenApply() — позволяет обработать результат (например, изменить его формат). 3️⃣ thenAccept() — принимает готовый результат и выполняет действие. 4️⃣ exceptionally() — обрабатывает возможные ошибки. 🔹 Зачем это нужно? ✅ Улучшает производительность за счет асинхронного выполнения. ✅ Избегает блокировки основного потока. ✅ Позволяет легко комбинировать операции. Используете ли вы CompletableFuture в своих проектах? Делитесь опытом в комментариях! 👇 👉@BookJava

👩‍💻 Вы — Java-разработчик, готовый к большему? Повышение квалификации на курсе «Java Developer. Professional» — это путь от
👩‍💻 Вы — Java-разработчик, готовый к большему? Повышение квалификации на курсе «Java Developer. Professional» — это путь от уверенного программиста до востребованного Middle+ специалиста. Почему этот курс для вас? — 96 часов практики и детального кода. — Основы JVM: разберём byteCode и сборку мусора. — Современные фреймворки: Spring WebFlux, Kafka, Kubernetes. — Реальные задачи и код-ревью от экспертов. Преподаватели с опытом в крупнейших компаниях помогут вам: — Освоить многопоточность и реактивный Postgres. — Решать задачи уровня Middle+ с уверенностью. — Писать код быстрее, чище и без лишних багов. 🔥 До 28.02 скидка на все курсы 10%, кроме этого дарим промокод Javapro-02 который прибавляет к скидке еще 5% !!! 🎫 Курс можно приобрести в рассрочку ➡️ Последний шанс пройти тестирование и получить скидку! Не упустите возможность прокачать свои навыки и построить впечатляющую карьеру: https://vk.cc/cIX0s5 Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

💥 Apache Kafka: мощь, которой вы еще не владеете! Курс, который сделает вас профи в потоках данных.💥 Превратите свои проект
💥 Apache Kafka: мощь, которой вы еще не владеете! Курс, который сделает вас профи в потоках данных.💥 Превратите свои проекты в образец стабильности и скорости! Учитесь у экспертов, которые знают Kafka изнутри. На курсе вы научитесь: - Разворачивать Kafka и настраивать брокеры. - Использовать API и разрабатывать программы на Kafka Streams, Spring, Akka, ZIO. - Интегрировать Kafka с другими системами. - Настроить мониторинг и безопасность. 💼 Реальная практика, живые лекции и диплом, который ценят ведущие компании. 💪 Готовы прокачаться? Пройдите полное тестирование и присоединяйтесь к группе с максимальной скидкой по промокоду "Kafka_5", а также получите доступ к открытым урокам курса: 👉 https://vk.cc/cIX01X Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

🚀 Параметры JVM: Какие ключевые стоит знать? Сегодня я покажу вам самые важные параметры JVM, которые помогут вам оптимизировать работу вашего Java-приложения. Эти флаги влияют на производительность, управление памятью и отладку. 🔥 Управление памятью: - -Xms<size> – задает начальный размер кучи. - -Xmx<size> – задает максимальный размер кучи. - -XX:NewRatio=<n> – определяет соотношение между молодым и старым поколением. - -XX:SurvivorRatio=<n> – соотношение между Eden и Survivor. ⚡ Гаражная сборка (GC): - -XX:+UseG1GC – включает G1 Garbage Collector (по умолчанию в Java 9+). - -XX:+UseParallelGC – включает Parallel GC. - -XX:+UseZGC – включает экспериментальный ZGC (минимальная пауза). - -XX:+UseShenandoahGC – еще один GC с низкими задержками. 🛠️ Диагностика и отладка: - -XX:+PrintGCDetails – подробный вывод информации о сборке мусора. - -XX:+HeapDumpOnOutOfMemoryError – дамп памяти при OOM. - -XX:HeapDumpPath=<path> – указывает путь для дампа памяти. - -XX:+ExitOnOutOfMemoryError – завершает JVM при OOM. 🏎️ Оптимизация JIT: - -XX:+TieredCompilation – адаптивная компиляция кода. - -XX:+UseStringDeduplication – уменьшает использование памяти строками. - -XX:+AlwaysPreTouch – аллокация памяти заранее (полезно для больших heap'ов). Попробуйте поэкспериментировать с этими параметрами и посмотрите, как они влияют на производительность вашего приложения! Какие параметры JVM используете вы? Пишите в комментариях! 👉 @BookJava