Я хочу использовать BigDecimal для представления произвольных чисел точности, таких как цены и суммы в торговом приложении с низкой задержкой, с тысячами заказов и отчетов об исполнении в секунду.Как использование BigDecimal повлияет на производительность приложения?
Я не буду делать много математических операций над ними, поэтому речь идет не о производительности BigDecimal как таковой, а о том, как большие объемы объектов BigDecimal повлияют на производительность приложения.
Моя забота заключается в том, что огромное количество недолговечных объектов BigDecimal будет создавать нагрузку на GC и привести к большим остановкам Stop-The-World в сборщике CMS - и это определенно то, чего я бы хотел избежать.
Не могли бы вы подтвердить мои проблемы и предложить альтернативы использованию BigD? Кроме того, если вы считаете, что мои проблемы ошибаются, пожалуйста, объясните, почему.
Update:
Спасибо всем, кто ответил. Теперь я убежден, что использование BigDecimal повредит латентность моего приложения (хотя я все еще планирую его измерить).
На данный момент мы решили придерживаться решения «очень не-ООП» (но без точного попадания) - используйте два int
s, один для мантиссы и другой для экспоненты. Обоснование этого заключается в том, что примитивы помещаются в стек, а не в кучу, и, следовательно, не подлежат сборке мусора.
Если BidD не для меня, что тогда? Я не использую двойники (поскольку он приносит много новых проблем с числами с плавающей запятой, с которыми я работаю, - это, естественно, десятичные числа). – vtrubnikov
+1 для указания ключевого момента о конкуренции по производительности. Как и в шутке об тигре и кроссовках, абсолютные цифры редко имеют значение, лучше/хуже, чем это важно. – soru
@ valery_la99 - Я добавил к своему ответу –