java

Stop java application gracefully

Today we are talking about how to stop java process gracefully. How can we shutdown your application? The first thing cames to my mind is to kill the application by next shell command kill -9 <application-pid>. It is possible to save PID app to somewhere, for instance into a file, and then read PID and execute the command. However in reality sometimes it’s an appropriate way.Imagine the situation — there is an application and this app has some work to…

0
Read More

Getting started with Selenide

Today we are talking about how to create a simple application based on selenide framework. Show me the code!© First of all, the selenide framework is a wrapper of selenium framework with a more convenient API. Very often it is used to test UI. However, there is another way of using selenide. Recently, I have faced that our partner did not provide any API except UI panel. It was very sad news for me because I have to scope with…

0
Read More

CPU оптимизации

Сегодня, в этой небольшой статье, я хотел бы поделиться своими знаниями об оптимизациях центрального процессора. А именно: branch prediction cache levels false sharing prefetching loop unrolling Начнем в первой. В детали вдаваться не буду, а начну сразу с примера. Допустим у нас есть следующий метод: Выглядит вполне симпатично и на первый взгляд не представляет никаких угроз, но это только на первый взгляд. Если мы померим время выполнения данного метода для произвольного массива и для него же, но только отсортированного, результат…

0
Read More

Генерирование классов во время выполнения

Иногда требуется создать класс с определенным поведением во время работы программы. К сожалению, Java не обладает динамизмом, присущем таким языками как Python, Javascript, Groovy. Но все же, возможность такая существует, и есть несколько способов это сделать. Например, сгенерировать напрямую байткод. Но такой способ, довольно сложен. Мы же, в данной статье, напишем исходный код и затем скомпилируем его.

0
Read More

Задача о корректности расстановки скобок

Хочется рассказать о такой задаче, как определение корректности расстановки скобок. Она так же известна, как balanced parenthesis problem. Суть ее в следующем: дана строка, содержащая открывающиеся и закрывающиеся скобки, и какие то другие символы. Нужно узнать правильно ли расставлены скобки. Т.е. для каждой открывающейся скобки должна быть закрывающаяся. Например, строки вида (()) или (()()) содержат корректную расстановку, а (()() и )()( уже нет.

0
Read More

Rest сервис на Netty

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

0
Read More

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

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

0
Read More

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

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

0
Read More

Кидаем исключения типа Object

Всем известно, что кидать исключения можно только, если объект наследуется от класса java.lang.Throwable. Для этого предназначена инструкция байткода ATHROW. Мне стало интересно, осуществляется ли проверка типа после компиляции.Напишем небольшой метод, генерирующий нужный класс, с помощью библиотеки bcel.

0
Read More