JAVA → Непрерывный мониторинг JVM с помощью Zabbix
Предположим, у вас есть большое приложение написанное на Java. Это может быть web-сервлет размещенный в контейнере или standalone-сервис. В процессе разработки (да и во время эксплуатации) возникает необходимость отслеживать процессы, протекающие в JVM: работу garbage collector, использование памяти, жизненный цикл потоков, а так же иные специфичные для вашего проекта показатели по средствам MBean. Самый простой вариант — использовать профилировщик. Но увы, проблемы не случаются по расписанию, и невозможно заранее знать, когда нужно подключить профилировщик, а держать его постоянно включенным тоже не вариант. В таких случаях идеальное решение — непрерывный мониторинг. О нем и пойдет речь. Но для начала пара слов о классической профилировке.
JAVA → Размер Java объектов. Используем полученные знания
В предыдущей статье много комментаторов были не согласны в необходимости наличия знаний о размере объектов в java. Я категорически не согласен с этим мнением и поэтому подготовил несколько практических приемов, которые потенциально могут пригодится для оптимизации в Вашем приложении. Хочу сразу отметить, что не все из данных приемов могут применяться сразу во время разработки. Для придания большего драматизма, все расчеты и цифры будут приводится для 64-х разрядной HotSpot JVM.
Итак, давайте рассмотрим следующий код:
А теперь проведем денормализацию:
Казалось бы — избавились от композиции и все. Но нет. Объект класса Cursor2 потребляет приблизительно на 20% меньше памяти чем объект класса Cursor (по сути Cursor + Position). Такое вот не очевидное следствие декомпозиции. За счет ссылки и заголовка лишнего объекта. Возможно это кажется не важным и смешным, но только до тех пор, пока объектов у Вас мало, а когда счет идет на миллионы ситуация кардинально меняется. Это не призыв к созданию огромных классов по 100 полей. Ни в коем случаем. Это может пригодится исключительно в случае, когда Вы вплотную подошли к верхней границе Вашей оперативной памяти и в памяти у Вас много однотипных объектов.
Денормализация модели
Итак, давайте рассмотрим следующий код:
class Cursor {
String icon;
Position pos;
Cursor(String icon, int x, int y) {
this.icon = icon;
this.pos = new Position(x, y);
}
}
class Position {
int x;
int y;
Position(int x, int y) {
this.x = x;
this.y = y;
}
}
А теперь проведем денормализацию:
class Cursor2 {
String icon;
int x;
int y;
Cursor2(String icon, int x, int y) {
this.icon = icon;
this.x = x;
this.y = y;
}
}
Казалось бы — избавились от композиции и все. Но нет. Объект класса Cursor2 потребляет приблизительно на 20% меньше памяти чем объект класса Cursor (по сути Cursor + Position). Такое вот не очевидное следствие декомпозиции. За счет ссылки и заголовка лишнего объекта. Возможно это кажется не важным и смешным, но только до тех пор, пока объектов у Вас мало, а когда счет идет на миллионы ситуация кардинально меняется. Это не призыв к созданию огромных классов по 100 полей. Ни в коем случаем. Это может пригодится исключительно в случае, когда Вы вплотную подошли к верхней границе Вашей оперативной памяти и в памяти у Вас много однотипных объектов.
Блог компании Jelastic → Jelastic на Java Day SPB 2012
Блог компании Ciklum → Поделись опытом и послушай Java-гуру на Сиклум Java Субботнике 11 февраля
Мы снова открываем сезон Сиклум Субботников в Киеве! Наш прошлый Сиклум Java Субботник в столице Украины был настоящим фуррором — его посетили 150 человек! Видя такой интерес и учитывая пожелания встретиться вновь, мы решили повторить :) и организовать еще одно полезное и приятное мероприятие для всех, кто программирует или только собирается начинать работать на Java.
По традиции, мы приглашаем всех желающих бесплатно посетить Сиклум Java Субботник 11 февраля в нашем киевском офисе
По традиции, мы приглашаем всех желающих бесплатно посетить Сиклум Java Субботник 11 февраля в нашем киевском офисе
Блог компании Jelastic → GlassFish кластеризация в Jelastic
Как вам уже известно, GlassFish — высоконадежный Java EE сервер приложений с полной поддержкой промышленной кластеризации и широким спектром функций.
До недавнего времени Glassfish использовался в Jelastic Java PaaS просто как отдельный сервер, теперь же мы поддерживаем все функции этого сервера, включая высокую доступность (HA).

Мы сберегли «родную» кластерную архитектуру GlassFish, которая основана на концепции административного домена. Административные домены состоят из кластеров и инстансов, контроль над которыми осуществляется с помощью DAS (Domain Administration Server).
Вы можете управлять центральным репозитарием с помощью админ консоли. Это легкий в использовании GUI, который поддерживает все фичи, доступные в Glassfish. DAS управляет Java инстансами домена, а GMS (Group Management Service) отвечает за предоставление информации о кластере и его инстансах.
До недавнего времени Glassfish использовался в Jelastic Java PaaS просто как отдельный сервер, теперь же мы поддерживаем все функции этого сервера, включая высокую доступность (HA).
Мы сберегли «родную» кластерную архитектуру GlassFish, которая основана на концепции административного домена. Административные домены состоят из кластеров и инстансов, контроль над которыми осуществляется с помощью DAS (Domain Administration Server).
Вы можете управлять центральным репозитарием с помощью админ консоли. Это легкий в использовании GUI, который поддерживает все фичи, доступные в Glassfish. DAS управляет Java инстансами домена, а GMS (Group Management Service) отвечает за предоставление информации о кластере и его инстансах.
JAVA → Java DNS API, Wikipedia и twitter-марафон в одном флаконе из песочницы
Некоторое время назад я решал задачу автоматической покупки домена. Нужно было оформить в виде библиотеки (jar и файл настроек), которая использовалась бы в корпоративном приложении на Java. Я начал поиски DNS провайдеров с public API. Желательно, чтобы API были попроще, и домены подешевле — такой баланс оказалось не просто найти.
NoSQL → Подводные камни в Project Voldemort
Используется в одном из наших проектов такая штучка как Project Voldemort.
Если вкратце, то это весьма любопытная реализация key-value storage aka NoSQL database, реализованная в недрах Linkedin. То есть даешь ему ключик и значение, и оно быстро в памяти это хранит/отдает и на диске тоже сохраняет. Интересна она, в принципе, не этим, а своей реализацией кластеризации, неплохой скоростью, ну тем что часто используется в проектах на Java. В принципе, подробного обзора этой БД на Хабре не было, и можно как нибудь сделать. Но рассказать я тут хочу пока о одних граблях, с которыми пришлось столкнуться.
Если вкратце, то это весьма любопытная реализация key-value storage aka NoSQL database, реализованная в недрах Linkedin. То есть даешь ему ключик и значение, и оно быстро в памяти это хранит/отдает и на диске тоже сохраняет. Интересна она, в принципе, не этим, а своей реализацией кластеризации, неплохой скоростью, ну тем что часто используется в проектах на Java. В принципе, подробного обзора этой БД на Хабре не было, и можно как нибудь сделать. Но рассказать я тут хочу пока о одних граблях, с которыми пришлось столкнуться.
JAVA → «Разбор полетов» — episode 9 — Индусоустойчивость
Творческий коллектив редакции подкаста «Разбор полетов» представляет вашему вниманию очередной девятый выпуск разговорно-болтологического IT-тематического подкаста;.
В этом выпуске:
В этом выпуске:
прослушан 177 раз
JAVA → SOAP-сервер на Java при участии Apache CXF и Spring из песочницы
За последнее время появилось несколько статей, рассказывающих о протоколе SOAP, а также описывающих процесс создания сервера на различных языках и платформах. Продолжим тему. В этой статье будет описываться создание сервера на языке Java с использование Apache CXF и Spring Framework. Предполагается, что читатель уже имеет общее представление об упомянутом протоколе, а также о работе с ant и maven. Для того, чтобы сделать задачу немного интереснее, добавим начальное условие: дана WSDL-схема, описывающая веб-сервис. Итак…(Картинка из статьи на Wikipedia.)
JAVA → Swing. Десять полезных простых вещей

Хочу поделиться недавним опытом разработки апплетов на Swing и рассказать про подводные камни, приемы найденные и использованные в процессе работы.