Java

A modest introduction to UUIDs in Java

UUIDs are an important element of programmers’ daily activities. In Java, as in practically every other language, we make extensive use of UUIDs to generate unique identifiers. There is a special class called java.util.UUID that exists solely to represent immutable universally unique identifiers. According to Java documentation, there are four...

Continue reading...

Что такое Dozer – это mapper

Иногда в проектах требуется скопировать атрибуты одного объекта в другой, временами не напрямую, а с некоторыми преобразованиями, например извлечением подстроки или наоборот, объединением нескольких полей родительского объекта в единое поле дочернего. Такие преобразования называются маппингами (mappings). Чаще всего они применяются там, где необходимо передать Java-объект без избыточных чувствительных данных. Об...

Continue reading...

Внедрение зависимостей в класс, не являющийся частью контекста Spring

Или, другими словами, как быть, если внедрить зависимость нужно, а класс собирается где-то в недрах проекта через new, то есть контекст Spring о нём даже не догадывается (а значит и никаких зависимостей в него не добавляет)? А столкнулся я с этим на текущем проекте. Есть некий клиентский API для работы...

Continue reading...

java.lang.NoClassDefFoundError: Could not initialize class

Недавно я столкнулся с проблемой при отладке интеграции с одним из сторонних приложений, которое поставляется ‘as is’ и работает на IBM WebSphere. Оно использует внутренние JMS-очереди сервера для коммуникации с нашими приложениями, развернутыми там же. При миграции на новую версию сервера я столкнулся с NoClassDefFoundError, возникающей в одном из классов...

Continue reading...

Многопоточность в Java

Это – перевод статьи “Threading in Java” автора Beka Kodirov. Вторая часть статьи находится здесь. Чем отличается поток от процесса? Процессы были разработаны для обеспечения многозадачности в операционных системах. Все приложения живут в рамках процессов, а память и ЦПУ выделяются напрямую ядром ОС. При желании можно запустить часть вашего приложения...

Continue reading...

Как работает обработка исключений на уровне виртуальной машины Java

Источник: Java Perfomance (Hunt & John, 2011)  Виртуальные машины Java используют исключения в качестве сигнала о том, что программа нарушила некие семантические ограничения языка. Например, попытка получить доступ к индексу за пределами массива вызовет ошибку. Исключение провоцирует нелокальное перемещение контроля из точки возникновения или “выброса”, в точку, которая была определена...

Continue reading...

Типы опций командной строки для запуска виртуальной машины Java

Источник: Java Perfomance (Hunt & John, 2011) Существует три типа опций командной строки: стандартные, нестандартные и опции разработчиков. Стандартные опции могут использоваться в любой реализации JVM, как того требует the Java Virtual Machine Specification. Они остаются неизменными от релиза к релизу, однако могут стать deprecated в релизах, следующих за тем,...

Continue reading...

Integer Cache в Java

Для оптимизации потребления памяти некоторые классы-оболочки в Java (например Integer, Byte, Short, Long и Character ) кэшируют значения в ограниченном диапазоне (чаще всего от -128 до 127). Покопавшись в исходниках JDK, можно отыскать внутренний статический класс IntegerCache: В Static-блоке инициализируется массив cache, он заполняется объектами Integer со значениями от -128...

Continue reading...

Многопоточность в Java: Hardware

Это – перевод статьи “Threading in Java. Part II. Hardware” автора Beka Kodirov. Первая часть статьи находится здесь. Расскажите об иерархии кэшей L1/L2/L3? Зачем они нужны? Кэши L1/L2/L3 это сегменты памяти, в чем-то схожие с RAM. Это быстрая память небольшого объёма, которая используется для уменьшения времени доступа процессора к данным...

Continue reading...

hashCode() и equals(): нарушить (,) нельзя (,) соблюдать

Второй по популярности (после различий между LinkedList и ArrayList) вопрос на собеседованиях – контракт между методами hashCode() и equals(). Метод hashCode() класса Object – нативный (то есть написан не на Java и вызывается с помощью JNI). Из сигнатуры следует, что хэш-код является некоторым целочисленным значением типа int. Полагаю, что реализация...

Continue reading...