ru

статьи на русском языке

Rest сервис на Netty

Недавно познакомился с фреймворком Netty. В традиционной модели на каждое соединение создается один поток, который его обрабатывает. Это приводит к росту нагрузки на CPU и объема потребляемой памяти. Netty использует другой подход, позволяющий обрабатывать одновременно количество соединений большее, чем количество запущенных потоков. Реализован он с использованием библиотеки java.nio. В данной статье, я опишу как Netty работает и расскажу как реализовать с его помощью простой REST сервис. Для понимания принципа работы Netty с начало нужно обратиться к паттерну pipeline (Подробная статья…

0
Read More

JVM параметры для тонкой настройки сборщика мусора

Совсем недавно столкнулся с необходимостью уменьшения паузы «stop world» во время сборки мусора. Во время копания в данном вопросе, открыл для себя множество интересных параметров jvm. Чтобы знания не потерялись, решил зафиксировать их в табличку.

0
Read More

Находим утечки соединений при помощи JavaMelody

JavaMelody — это инструмент для мониторинга web приложений. Во время работы собирает различную статистику, например: количество http соединений, пользовательских сессий. количество jdbc соединений, более того можно узнать какие производились запросы и какие из них являются «горячие». Есть возможность увидить открытые в данный момент с точностью до метода из которого происходит обращение, это очень полезно для выявления так называемых утечек соединений. количество памяти и загруженность процессора и прочее. Всю эти данные он агрегируют и рисует графики в реальном времени. Более подробную…

0
Read More

Кэширование в hibernate

На днях столкнулся с задачей кэширования запросов к БД. Приложение использовало, как это не странно, hibernate. В этой статье я расскажу, о том какие бывают кэши в hibernate, каким образом их использовать и как настраивать.

0
Read More

Конвертирование дат из XMLGregrorianCalendar в GregorianCalendar

При парсинге xml файла наткнулся на следующую проблему. Даты ранее 1582 года содержащиеся в XMLGregorianCalendar некорректно конвертируются в GregorianCalendar. Вывод: Это происходит из-за перехода с Юлианского календаря на Грегорианский. Чтобы того не было, необходимо явно выставить дату. Вывод:

0
Read More

Ускоряем сборку проекта с использованием maven и git

Всем привет, хочу предложить небольшой Proof of Concept, который должен ускорить сборку сложного, многомодульного мавен проекта. Как мы обычно собираем проект? В любимом терминале вводим: mvn clean installПосле этого maven компилирует весь проект и копирует созданные артифакты в локальный репозиторий. Все тривиально, но здесь есть ряд проблем. Это долго. Даже если убрать clean, запустятся тесты, после них произойдет упаковка в jar или какой другой тип артифакта, и наконец копирование полученного артифакта в $HOME/.m2/repository Давайте подумаем над тем, как мы можем…

0
Read More

Неочевидные оптимизации JIT

В данном посте, я расскажу про интересный случай возникший у меня работе. Есть следующий код: В методе проиcходит сериализация массива байт. Используется тот факт, что размер char в java — 16 бит, а размер byte (Внезапно 😱) — 8 бит. Но суть не в этом. Интересный момент здесь заключается в том, что метод работает гораздо медленее на массивах нечетной длины.

0
Read More

Collect своими руками

После выхода java 8 появилась возможность писать в pipeline стиле. Т.е. создавать последовательность операций которые будут обрабатывать элементы из некоторого источника, будь то коллекция, бесконечная и конечная генерирующая функция, строки из файла и пр. Это тема достаточно обширная и она не будет освещена в данном топике. Расскажу про collector’ы. Это такие объекты с помощью которых, можно привести результат обработки элементов к определенному виду. Существует несколько встроенных, в классе java.util.stream.Collectors. Например, там есть toList, он создает список из элементов потока. Есть…

0
Read More

Исправляем конфликт зависимостей

Однажды при деплои на тестовый стенд обнаружилась такая ошибка NoSuchMethodException. Просмотр логов дал следующую информацию: Довольно странное исключение, если учесть, что локально, все работало прекрасно. Наиболее вероятной причиной возникновения данной ошибки — разные версии библиотек. Судя по всему, в проекте оказалось несколько версий одного и того же класса. Как это можно решить?

0
Read More

О строителях

Сегодня речь пойдет о шаблоне проектирования Builder, или же по русски, строитель. Начнем с определения и выясним для чего он нужен. Строитель относится к порождающим шаблонам, а значит, с его помощью создаются объекты. Он позволяет конструировать объект по частям. Приведу пример, как выглядит типичный Builder. Допустим у нас есть класс Person

0
Read More