Я хочу использовать BigDecimal для представления чисел произвольной точности, таких как цены и суммы, в торговом приложении с малой задержкой и тысячами ордеров и отчетов об исполнении в секунду.
Я не буду выполнять с ними много математических операций, поэтому вопрос не в производительности BigDecimal как таковой, а скорее в том, как большие объемы объектов BigDecimal повлияют на производительность приложения.
Меня беспокоит то, что огромное количество короткоживущих объектов BigDecimal создаст нагрузку на GC и приведет к большим паузам Stop-The-World в сборщике CMS - и это определенно то, чего я хотел бы избежать.
Не могли бы вы подтвердить мои опасения и предложить альтернативы использованию BigD? Кроме того, если вы считаете, что мои опасения ошибочны, объясните, почему.
Обновление:
Спасибо всем, кто ответил. Теперь я убежден, что использование BigDecimal уменьшит задержку моего приложения (хотя я все еще планирую ее измерить).
На данный момент мы решили придерживаться "очень не-ООП" решения (но без повышения точности) - использовать две int
, одну для мантиссы и другую для экспоненты. Причина этого в том, что примитивы помещаются в стек, а не в кучу, и, следовательно, не подлежат сборке мусора.