Архив метки: java

Как jcmd помогает настроить JVM для low-latency

Утилиту jcmd добавили в Java 7 и с тех пор она считается главной утилитой, с помощью которой вы отныне будете заглядывать внутрь JVM и замерять все параметры ее работы. Все остальные утилиты типа jps, jstack, jinfo и проч. считаются теперь устаревшими и скоро в каком-то из будущих релизов JDK будут удалены. Предполагается, что jcmd заменит их всех. Давайте посмотрим, как работает утилита, и что полезного с ее помощью можно узнать о работающем приложении и как эта информация может нам пригодиться для настройки JVM и самого приложения с целью достижения low-latency.

Читать далее

infoq.com: Интервью с создателями Shenandoah

Информационный сайт infoq.com встретился с работниками компании Red Hat Шипилевым и Кеннке и провел с ними интервью о сборщике мусора Shenandoah, который разрабатывается в Red Hat и предназначен для быстрой сборки мусора на больших объемах памяти.

Путеводитель по теме low-latency и Java

Количество статей в блоге превысило 100. Чтобы вам легче было ориентироваться в темах low-latency и Java, я решил создать данную статью-путеводитель, которая даст список статей по этим темам в том порядке, в котором их лучше всего прочитать.

Читать далее

Паттерны интеграции

Задача интеграции часто встречается особенно в приложениях уровня предприятия. Это связано с тем, что именно в большой организации есть множество разнородных систем, которые надо научить говорить друг с другом. Часто это системы устаревшие или несовместимые друг с другом. Системы могут работать на разных платформах, быть написаны на разных языках, разными командами, и использовать разные подходы получения, обработки, хранения и вывода данных. Между системами могут быть непреодолимые границы в виде файрволов, не позволяющие, например, офису в Каргополе подключиться напрямую к базе данных головного офиса в Шепетовке. Из-за этого при передаче данных приходится прибегать к ручному труду, многократному переконвертированию данных из одного формата в другой, передаче этих данных и повторному их вводу в другую систему тоже иногда вручную. Ручной труд усложняется с усложнением бизнес процесса. Данные уже не просто надо переложить из одного приложения в другое, а еще и обработать.

Все эти процессы сложные и разнообразные по форме по сути являются процессами интеграции, т.е. процессами обмена данными между системами каким-то определенными способом.

Читать далее

Заглядываем за кулисы Java-приложения с помощью pidstat и jstack

В данной статье мы посмотрим лишь на две утилиты pidtstat и jstack. Их всего две, но они многое могут рассказать о работе многопоточного Java-приложения. Например, найти, какой поток оказался в состоянии deadlock, или какой поток загружает CPU на 100%.

Читать далее

Принципы написания торговых low-latency приложений на Java

Данная статья является частью серии статей о том, как пишутся low-latency торговые приложения. Вводная статья содержит начальные сведения о подходах к оптимизациям вообще, вторая статья рассказывает об подходах к оптимизации на всех уровнях торговой системы: от железа до настройки JVM. Данная же статья, рассказывает уже подробно об оптимизациях в самом Java-приложении.

Статья ориентирована на программистов, чтобы помочь им в изучении Java, понимании JVM и развитии навыков программирования.

Читать далее

Сайты о Java и финансах

Краткий список сайтов, которые я стараюсь посещать ежедневно, чтобы быть в курсе последних новостей о Java и о том, что происходит в сфере биржевых технологий и финансового бизнеса.

Читать далее

Пулы объектов для достижения высокой производительности в Java

В торговых приложениях создается множество объектов в реальном времени. Скажем, каждый новый ордер от клиента создает объект Order. Исполнение ордера на рынке порождает новый объект Fill или Partial Fill. И если поток ордеров очень высок во время активного торгового дня, это создание новых объектов оказывает:

  • большую нагрузку на JVM по созданию новых экземпляров объектов из классов;
  • большую нагрузку на память, для записи всех этих объектов в heap;
  • большую нагрузку на сборщик мусора, который должен постоянно отслеживать появление этих новых объектов и проверять, не стали ли они мусором.

Все эти операции имеют большие накладные расходы сами по себе, плюс могут привести к непредсказуемым задержкам, поэтому Java-программисты нашли обходное решение этой проблемы: использовать пулы заранее созданных объектов (object pools). Т.е. переиспользовать объекты, которые уже не нужны, вместо создания новых.

Читать далее

Почему нельзя использовать double для финансовых расчетов

В финансовых расчетах часто приходится оперировать дробными числами. Например, на некоторых рынках цены на опционы и фьючерсы могут иметь два и даже три знака после запятой. Цены на некоторые акции могут выражаться в пенни, так называемые penny-stocks. Для валидации ордеров перед отправкой на рынок надо проверять, не выходит ли указанная цена ордера за определенные пределы (price limits), рассчитанные от текущей рыночной цены инструмента. Например, надо вычислить +/-5% от цены 1.005. Казалось бы для выражения цены в Java идеально подходит примитивный тип double. Но это крупная, опасная ошибка!

Читать далее

infoq.com: The Ghosts of Java Past, Present and Yet to Come [video]

Отличная презентация The Ghosts of Java Past, Present and Yet to Come об истории Java и том, какие языки послужили источником вдохновения при ее создании: LISP, Simula, C, Modula, SmallTalk, Pascal (p-code), Mesa, Cedar, Objective-C, Ada, C++.

Читать далее