Всем привет! ???? ???? ????

Мы — Java-разработчики Тинькофф: Андрей, Арсений и Константин. Собираем все интересное из мира Java-разработки и решили делиться этим не только с коллегами, но и со всем сообществом.

В этом выпуске мы погрузимся в глубины нескольких JEP, что скрываются во мраке. Взглянем на проекты Loom и Вальхаллу. 

В нашем мрачном путешествии поговорим о сборке мусора и таинственном процессе утилизации ненужных объектов в Java. Какие ужасы скрываются в этих загробных мирах? Заглянем в бездну тестирования и воззовем к силам распределенных транзакций, о которых шепчут только отважные.

Но не только мрачные стороны Java раскроют нам свои секреты. Воссияет новый JShell, воскрешенный эхом древних заклинаний. Приготовьтесь отправиться в удивительное путешествие мира Java.

В честь Хеллоуина, эту аннотацию нам помог сгенерировать ChatGPT

Главные новости

JEP draft: Support Markdown in Documentation Comments — появился интересный JEP draft, в котором предлагается ввести новый вид комментариев, поддерживающих Markdown.

FFM goes final! Foreign Function & Memory API вышел из превью и интегрирован в JDK 22 в финальном статусе. Напомним, что он призван заменить JNI и упростить интеграцию с нативным кодом в Java, а еще сделать ее более производительной. 

Joker 2023 — с 9 по 14 октября прошла ежегодная конференция Joker 2023. Можно ознакомиться с темами докладов и посмотреть доступные презентации.

Интересные видео

Choosing between ArrayList and LinkedList - JEP Cafe #20

Что выбрать: ArrayList или LinkedList? Это не только популярный вопрос на интервью, но и важное решение, которое мы часто принимаем в повседневной работе. В интернете много материалов на эту тему. Это видео интересно тем, что разбор происходит на основе отчетов, полученных с помощью JMH. Можно увидеть, как структура выбранной коллекции влияет на работу с различными объемами данных в разных кейсах.

New Class-File API will make Java Updates easier - Inside Java Newscast #56

Николай рассказывает о том, как JEP 457 Classfile API упростит миграцию на новые мажорные версии Java. За счет нового уровня абстракции в виде API для работы с байт-кодом нам больше не нужно будет вслед за Java апдейтить все зависимости в проекте. Правда, все это великолепие станет стабильным в лучшем случае только в 25 Java через два-три года ????

Java's G1 Garbage Collector

Сборщик мусора G1, используемый по умолчанию в Java, — увлекательное технологическое решение с богатой историей. В этом выпуске мы глубоко погружаемся в сборщик мусора, чтобы понять его ключевые архитектурные особенности, позволяющие достигать поставленных целей производительности. Рассмотрим, как использовать G1, и заглянем в его будущее.

Where the JVM is Entering the Era of AI Performance Tuning! By Ana Maria Mihalceanu

Разработанная командой JVM в компании Oracle, Oracle Java Management Cloud Service представила искусственный интеллект для анализа и генерации рекомендаций по настройке, чтобы улучшить производительность java-приложений. В ролике показано, как он работает и как им пользоваться.

Accessing JDK Tools in JShell

Инструмент JShell, интерактивная среда чтения, выполнения и вывода результатов — REPL. Его добавили в JDK 9, обновили в JDK 21 для более удобного доступа к инструментам JDK. Давайте посмотрим на это!

Project Leyden By Brian Goetz

Доклад о Project Leyden от архитектора языка Java, известного по книге Java Concurrency in Practice. Напомним, что Project Leyden призван уменьшить время старта и достижения максимальной производительности для java-приложений. Brian Goetz рассказывает о фичах, которые только планируется реализовать в рамках проекта, и о тех, которые можно использовать уже сейчас. А еще о том, почему Java может превосходить в производительности C. Доклад затрагивает много топиков, связанных с JVM, и может быть полезен тем, кто хочет углубиться в эту тему.

Java Digest за август и за сентябрь

Появились записи обсуждения выпусков нашего дайджеста за август и сентябрь в рамках Книжного клуба.rar на канале JVM Dev.

В выпуске за август обсудили апгрейд с Java 17 до 21, партиционирование таблиц в Postgresql и пирамиду потребностей Маслоу для разработчиков Java/Kotlin, а в выпуске за сентябрь обсудили саму Java 21, а также Project Loom.

Полезные статьи

What is… concurrent undo cycle — о concurrent undo cycle в сборщике G1GC и может быть полезна для более глубокого погружения в работу сборщиков мусора. Сам же concurrent undo cycle появился еще в Java 16 для оптимизации самых требовательных к процессору этапов сборки мусора. 

How to Diagnose and Mitigate Pinning in Java’s Virtual Thread Execution — полезная статья о проблеме застревания виртуальных потоков. Автор объясняет, что такое застревание, почему это плохо, как его диагностировать и избежать. А еще о том, почему в мире виртуальных потоков не стоит пользоваться synchronized. 

Асинхронный API First — о принципе разработки API First, который подразумевает, что API является основной частью приложения и приоритетным аспектом разработки как для клиентской, так и для серверной сторон. Описываются проблемы, с которыми сталкиваются при документировании интерфейсов, работающих с брокерами сообщений.

Распределенные транзакции. Отличный конспект про распределенные транзакции, их проблемы и решения с примерами. Подойдет для подготовки к собесу на middle-/senior-разработчика или для ликбеза по теме. Описаны двухфазный коммит, орекстрация SAGA, возможные реализации хореографии SAGA и parallel pipelines, есть их сравнительная характеристика.

Beyond Loom: Weaving new concurrency patterns. Автор рассматривает паттерны, которые появляются в языке с приходом project loom и разбирает то, как эти паттерны будут взаимодействовать с будущими фичами Project Loom — Structured Concurrency и Scoped Values. Будет полезно всем, кто собирается пользоваться преимуществами виртуальных потоков.

Beyond Pass/Fail- a Modern Approach to Java Integration Testing. Уже не первый раз мы слышим, что пирамида тестирования устарела. В этом есть смысл. Благодаря таким инструментам, как Testcontainers, и их поддержке в Spring писать и поддерживать интеграционные тесты стало гораздо проще. Преимущества очевидны: они не так сильно привязаны к кодовой базе и тестируют совместную работу компонентов приложения. В статье упоминается, что благодаря им мы можем получить больше информации, чем прошел тест или упал. Добавив трейсы и инструмент для их анализа, можно отловить, например, проблемы с производительностью.

The best way to use Spring Data JPA Stream methods. Короткая, но полезная заметка о том, как использовать Stream API в Spring Data JPA репозиториях. Если все правильно настроить, получится простой код, который будет выгружать данные небольшими частями и не нагрузит ни базу долгими запросами, ни память приложения большим количеством объектов.

Как упростить себе жизнь: удобные юнит-тесты с JUnit и AssertJ. Хороший туториал о юнит-тестировании, который поможет вкатиться в тему. Простые и понятные примеры иллюстрируют проверенные практики. Жаль, что хотя бы поверхностно не затронута тема мокирования, ибо без него юниты представить сложно.

Level-up your Java Debugging Skills with on-demand Debugging. Интересный туториал о том, как настроить удаленный дебаг так, чтобы сессия стартовала при прокидывании исключения или команды от jcmd. 

Просто интересное

Посторонись, Copilot: подборка разнообразных AI‑инструментов для разработчиков. Мир разработки ПО стремительно меняется. Казалось бы, ChatGPT появился только вчера, а сейчас уже есть огромное количество всевозможных искусственных помощников. В статье — обзор инструментов, которые помогут в работе с разными задачами.

Эта неделя в мире Java (3 ноября)

Также вышел выпуск java-дайджеста от Олега Чирухина. Рекомендуем к прочтению.

Спасибо что были с нами! Ждем обратную связь в комментариях. Увидимся через месяц ????

Комментарии (2)


  1. KavboiHaggis
    07.11.2023 12:47
    +1

    Супер подборка! спасибо )


  1. amarkevich
    07.11.2023 12:47

    не затронута тема мокирования, ибо без него юниты представить сложно

    юнит тесты имеет смысл писать на самом низком уровне. как только кажется, что нужны моки - вы уже на уровне интеграционных тестов, где лучше эмулировать реальное окружение (зачастую и Testcontainers не нужны)