TGViewer
Channel Public Channel
Библиотека джависта | Java, Spring, Maven, Hibernate

Библиотека джависта | Java, Spring, Maven, Hibernate

@javaproglib

Все самое полезное для Java-разработчика в одном канале.

Учиться у нас: clc.to/AATM8w

Для обратной связи: @proglibrary_feeedback_bot

По рекламе: @tproger_sales_bot

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
Subscribers
22K
Photos
2.5K
Videos
57
Links
3.7K

Showing posts older than #7854 · Back to latest

Older Posts 20 shown
Post #7853 2.23K
🔗 Что такое pinning виртуального потока

Виртуальный поток обычно отцепляется от carrier thread, когда блокируется на операции ожидания. Но в некоторых ситуациях он может остаться привязанным к платформенному потоку — это называется pinning.

Классические причины:
🔘 блокирующая операция внутри synchronized;
🔘 выполнение native-кода через JNI.

Почему это важно?
Пока виртуальный поток pinned, carrier thread не может нормально использоваться для выполнения других виртуальных потоков.


🤔 А что с synchronized?

Начиная с Java 24, JVM изменила реализацию мониторов так, чтобы блокировка внутри synchronized больше не приводила к pinning виртуального потока в прежних сценариях.

Поэтому старый совет «везде заменить synchronized на ReentrantLock» уже неактуален.

🤩 А вот долгие блокирующие вызовы в native-коде всё ещё стоит учитывать при использовании виртуальных потоков.

══════ Навигация ══════
ВакансииЗадачиСобесы

🐸 Библиотека джависта
  • 👍 9
  • ❤ 2
Post #7852 2.46K
📍 Эти JVM-флаги больше не работают в Java 27

Если в старом скрипте запуска Java остались:

-noverify
-Xverify:none
-verifyremote
-noclassgc


после перехода на JDK 27 приложение может просто не запуститься.

Все четыре опции удалены из JDK 27 после нескольких релизов с предупреждениями о deprecated.

Например:


java -noverify -version

Unrecognized option: -noverify


-noverify и -Xverify:none отключали проверку байткода — именно поэтому их давно считали небезопасными и устаревшими.

-noclassgc и -verifyremote тоже были deprecated и теперь больше не принимаются launcher’ом.

══════ Навигация ══════
ВакансииЗадачиСобесы

🐸 Библиотека джависта
  • 👍 5
  • ❤ 2
Post #7851 2.68K
⚠️ Oracle меняет лицензию на обновления JDK 21

До сентября 2026 года обновления Oracle JDK 21 доступны по бесплатной лицензии NFTC.

📍 Начиная с октябрьского CPU 2026, новые обновления планируется выпускать уже под Java SE OTN License.

Сам JDK 21 не прекращает работу. Изменяется именно лицензия на дальнейшие обновления Oracle JDK.

Если важно сохранить NFTC, Oracle рекомендует переходить на JDK 25.

⁠🔗 Источник — Oracle

══════ Навигация ══════
ВакансииЗадачиСобесы

🐸 Библиотека джависта
  • 👍 4
Post #7850 2.64K
💡 Java 21: case null прямо в switch

Больше не обязательно отдельно проверять null перед switch. В Java 21 его можно обработать прямо в case:


String describe(Object o) {
return switch (o) {
case null -> "пусто";
case String s -> "строка: " + s;
case Integer i -> "число: " + i;
default -> "что-то ещё";
};
}


🟡 Если case null не указать, switch по null выбросит NullPointerException.

Удобно, когда вместе с pattern matching нужно явно определить поведение для null — без отдельного if.

══════ Навигация ══════
ВакансииЗадачиСобесы

🐸 Библиотека джависта
  • 🔥 10
  • 👍 5
Post #7848 2.6K
♻️ Было / стало: собираем JSON

🟡 Было — конкатенация строк:

String json = "{\n  \"name\": \"" + name + "\",\n" +
" \"age\": " + age + "\n}";


Работает, но читать и поддерживать такой код неприятно.

🟡 Стало — text block + formatted():

String json = """
{
"name": "%s",
"age": %d
}
""".formatted(name, age);


Кавычки внутри JSON не нужно экранировать, структура сразу читается как JSON, а лишние отступы слева text block убирает сам.

🤩 Но: для реального JSON такой подход подходит только для простых случаев. Если значения могут содержать кавычки, переносы строк и другие специальные символы, ручная сборка снова становится источником ошибок.

Для полноценной сериализации лучше использовать JSON-библиотеку.

══════ Навигация ══════
ВакансииЗадачиСобесы

🐸 Библиотека джависта
  • 👍 5
  • 🤔 3
Post #7844 2.67K
🤩 Утечка, которую не видит heap dump

Интересная ловушка: вызываешь string.intern() на динамических строках, приложение падает с OOM, делаешь heap dump — а там всё чисто. Где утечка?

🤩 Суть проблемы

String Pool до Java 7 жил в PermGen, с Java 7 переехал в heap. Казалось бы, проблема решена. Но нет.

Внутри String Pool использует нативную хеш-таблицу StringTable, которая живёт в native memory (вне heap). Когда ты делаешь intern(), в heap создаётся сама строка, но ссылка на неё хранится в нативной StringTable.

🤩 Что происходит

Строки попадают в heap (GC их уберёт), но StringTable в native memory растёт бесконечно. Размер StringTable фиксирован и задаётся -XX:StringTableSize. При переполнении — коллизии, деградация, OOM.

🤩 Как увидеть?


bashjcmd <pid> VM.stringtable


Или Native Memory Tracking:


bash-XX:NativeMemoryTracking=detail
jcmd <pid> VM.native_memory


Ищи раздел Symbol — там StringTable.

⚠️ String Pool — это не только heap. StringTable живёт в native memory, и это классическая офф-хип утечка.

══════ Навигация ══════
ВакансииЗадачиСобесы

🐸 Библиотека джависта
Post #7841 2.38K
🧩 Record — это не просто контейнер для данных

Создали record:


record Vehicle(String year, String make, String model) {}

var car = new Vehicle("2020", "Toyota", "Camry»);


И Java сразу даёт несколько методов.

🤩 Доступ к компонентам — прямо по их именам:

car.year(); // "2020"
car.make(); // "Toyota"
car.model(); // "Camry"

Не getYear(), а именно year() — это одна из особенностей records.

🤩 toString() генерируется автоматически:


System.out.println(car);

// Vehicle[year=2020, make=Toyota, model=Camry]


🤩 equals() сравнивает records по значениям компонентов:


var car1 = new Vehicle("2020", "Toyota", "Camry");
var car2 = new Vehicle("2020", "Toyota", "Camry");

car1.equals(car2); // true


И автоматически генерируется соответствующий hashCode().

То есть record уже из коробки даёт удобную модель «данные + value-based equality», а не просто сокращённую запись класса.

══════ Навигация ══════
ВакансииЗадачиСобесы

🐸 Библиотека джависта
  • 👍 12
Post #7839 2.86K
🚀 JDK 27 выйдет 15 сентября: что попробовать

До выхода Java 27 осталось меньше месяца. Из того, на что стоит обратить внимание:

🤩 Post-quantum TLS 1.3 — JEP 527 добавляет hybrid key exchange с ML-KEM прямо в JDK. В TLS появляются группы вроде X25519MLKEM768 — без стороннего криптографического провайдера.

🤩 Primitive types в pattern matching — пятый preview JEP 532. instanceof и switch смогут работать с примитивными типами без прежних обходных решений.

🤩 Structured Concurrency продолжает эволюционировать как preview API для управления группами связанных задач и их отменой.

А пока можно уже смотреть JDK 28 Early Access — там развивается Valhalla с Value Classes and Objects, а JSON API пока остаётся экспериментальной/incubating частью.

══════ Навигация ══════
ВакансииЗадачиСобесы

🐸 Библиотека джависта
  • ❤ 3
Post #7838 2.8K
🧹 Java научилась отдавать память обратно ОС во время простоя

В августовском обновлении OpenJDK 25 появился time-based heap uncommit для G1 GC.

Если JVM простаивает и часть committed heap больше не нужна, G1 теперь может вернуть эту память операционной системе. Фича включена по умолчанию и управляется G1UseTimeBasedHeapSizing.


📍 Особенно интересно для сервисов с неравномерной нагрузкой: условно, после пикового трафика JVM не обязана продолжать держать весь ранее выделенный heap.

А заодно Microsoft выпустила свежие сборки:

25.0.4.1, 21.0.12.1, 17.0.20.1 и 11.0.32.1.

🔗 Источник

══════ Навигация ══════
ВакансииЗадачиСобесы

🐸 Библиотека джависта
  • 👍 8
  • ❤ 2
Post #7837 2.51K
📌 6 принципов безопасности API

API — это не просто интерфейс, а ворота в вашу систему. Без должной защиты они становятся уязвимой точкой для атак.

Ключевые принципы безопасности API:

— Использование HTTPS
— Аутентификация и авторизация
— Ограничение запросов
— Валидация входных данных
— Управление доступом на основе ролей (RBAC)
— Мониторинг и логирование


🔗 Подробнее в статье

══════ Навигация ══════
ВакансииЗадачиСобесы

🐸 Библиотека джависта
  • 👍 4
Post #7836 2.21K
🌐 Зачем нужен CDN и как он работает

Когда пользователь из Сиднея открывает ваш сайт, его запрос летит на сервер в Германии и обратно. Это ~300 мс только на «дорогу» — и это для каждого изображения, шрифта, JS-файла.

CDN (Content Delivery Network / Сеть доставки контента) решает эту проблему в лоб: вместо одного сервера — тысячи точек по всему миру. Пользователь получает файлы с ближайшей к нему ноды, а не с вашего origin-сервера.

🔹 Origin и Edge

В архитектуре с CDN появляются два новых понятия:

Origin Server (Главный сервер): это ваш настоящий сервер, где крутится Spring Boot, лежит база данных и хранятся оригиналы всех файлов (например, в Amazon S3).

Edge Servers (Граничные серверы / Точки присутствия - PoP): это тысячи серверов CDN-провайдера (например, Cloudflare или Akamai), раскиданные по всему земному шару: в Сиднее, Токио, Нью-Йорке, Лондоне, Москве.

🔹 Как работает кэш

Первый запрос к конкретному файлу всё равно идёт до origin. CDN его скачивает, кэширует у себя и отдаёт пользователю. Все последующие запросы на тот же файл edge-сервер обрабатывает сам, не трогая ваш бэкенд. Это называется cache hit.

🔹 Что кладем в CDN

CDN идеально подходит для статического контента:

— Картинки, видео, аудио.
— Скомпилированные файлы JavaScript и CSS.
— Шрифты.

CDN не подходит для динамического контента:

— Корзина товаров.
— Приватные данные пользователя.
(Запросы к API /api/v1/users/me должны идти напрямую на ваш сервер, минуя кэш CDN).

🔹 Защита от DDoS

Современные CDN (тот же Cloudflare) - это не просто кэш. Это гигантский щит.

Если хакеры решат «положить» ваш сайт и отправят миллион запросов в секунду, этот удар примут на себя серверы CDN. Их пропускная способность измеряется терабитами. Они отфильтруют «мусорный» трафик, и ваш маленький Origin-сервер даже не заметит атаки.

🔹 Побочные эффекты

Ускорение: пользователи получают тяжелый контент мгновенно, потому что скачивают его из своего же города.

Экономия: ваш главный сервер больше не тратит процессорное время и трафик на отдачу терабайтов картинок. Вы платите за сервера меньше.

Безопасность: CDN скрывает реальный IP-адрес вашего сервера и защищает от DDoS-атак.

══════ Навигация ══════
ВакансииЗадачиСобесы

🐸 Библиотека джависта
  • 👍 5
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →