Брейкпоинты в IDEA (IntelliJ и другие) для разработчиков
Иногда смотрю, как люди дебажат, и чуть ли не ловлю инсульт🍺
Большинство разработчиков умеют только ставить и удалять брейкпоинты. А в IDEA есть куча полезных фич для отладки. Ниже самые годные:
[1] Условие остановки
Если метод вызывается часто или брейкпоинт стоит в цикле, не трать время, ожидая нужных значений:
▪️ ПКМ по брейкпоинту
▪️ В Condition добавь условие остановки. Можно использовать все доступные переменные, объекты и методы
[2] Динамически смотреть значения параметров
Вариант для новичков: добавить в код
Вариант для продвинутых:
▪️ Зажми Shift и поставь брейкпоинт
▪️ Отметь чекбокс Evaluate and log
▪️ Введи нужное выражение
Дебаггер не будет останавливать выполнение, но будет писать значение выражения в консоль. Супер полезно для многопоточки, кода сторонних библиотек и remote debugging.
[3] Отключение брейкпоинта
Ненужный брейкпоинт можно не удалять, а просто выключить:
▪️ Нажми на шестеренку у брейкпоинта
ИЛИ
▪️ ПКМ по брейкпоинту → снимай галочку Enabled
[4] Массовая чистка
Когда в проекте много брейкпоинтов, IDE может чуть тормозить во время дебага. Чтобы убрать лишние, открой полный список:
▪️ ПКМ по любому брейкпоинту
▪️ Link More
▪️ Слева будет список брейкпоинтов
▪️ Удаляй ненужные
Обязательно попробуй. Пусть дебаг будет как по маслу👍
👉 Java Portal
Иногда смотрю, как люди дебажат, и чуть ли не ловлю инсульт
Большинство разработчиков умеют только ставить и удалять брейкпоинты. А в IDEA есть куча полезных фич для отладки. Ниже самые годные:
[1] Условие остановки
Если метод вызывается часто или брейкпоинт стоит в цикле, не трать время, ожидая нужных значений:
[2] Динамически смотреть значения параметров
Вариант для новичков: добавить в код
System.out.println с нужным полем/выражением.Вариант для продвинутых:
Дебаггер не будет останавливать выполнение, но будет писать значение выражения в консоль. Супер полезно для многопоточки, кода сторонних библиотек и remote debugging.
[3] Отключение брейкпоинта
Ненужный брейкпоинт можно не удалять, а просто выключить:
ИЛИ
[4] Массовая чистка
Когда в проекте много брейкпоинтов, IDE может чуть тормозить во время дебага. Чтобы убрать лишние, открой полный список:
Обязательно попробуй. Пусть дебаг будет как по маслу
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥6
Java 25: апгрейд, который экономит до 30% RAM (без правок кода)
В JDK 25 добавили одну из самых заметных оптимизаций за долгое время: Compact Object Headers (JEP 519).
Что меняется:
- размер заголовка объекта уменьшается примерно с ~12 байт до 8 байт
- меньше памяти на объект -> меньше heap
- меньше heap -> меньше давление на GC
- меньше GC -> сервис быстрее + облако дешевле
Где профит максимальный:
Spring Boot, микросервисы, DTO, records, кэши, в общем всё, где много мелких объектов.
Включается одной опцией:
-XX:+UseCompactObjectHeaders
По отзывам из реальных систем:
снижение heap на 15–30% встречается довольно часто.
Просто протестируй на своих сервисах и забирай “бесплатную” экономию.
👉 Java Portal
В JDK 25 добавили одну из самых заметных оптимизаций за долгое время: Compact Object Headers (JEP 519).
Что меняется:
- размер заголовка объекта уменьшается примерно с ~12 байт до 8 байт
- меньше памяти на объект -> меньше heap
- меньше heap -> меньше давление на GC
- меньше GC -> сервис быстрее + облако дешевле
Где профит максимальный:
Spring Boot, микросервисы, DTO, records, кэши, в общем всё, где много мелких объектов.
Включается одной опцией:
-XX:+UseCompactObjectHeaders
По отзывам из реальных систем:
снижение heap на 15–30% встречается довольно часто.
Просто протестируй на своих сервисах и забирай “бесплатную” экономию.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
Java: Records не ограничены ролью просто контейнера данных, в них можно добавлять кастомные конструкторы и методы для валидации.
✅ В records можно иметь конструкторы, статические методы и методы экземпляра:
👉 Java Portal
public record Email(String address) {
// Конструктор с валидацией
public Email {
if (address == null || !address.matches("^[\\w-.]+@([\\w-]+\\.)+[\\w-]{2,4}$")) {
throw new IllegalArgumentException("Некорректный email-адрес: " + address);
}
}
// Метод экземпляра
public String domain() {
return address.substring(address.indexOf('@') + 1);
}
// Статический метод
public static Email from(String raw) {
return new Email(raw.trim().toLowerCase());
}
}Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3