我希望在一款每秒处理数千个订单和执行报告的低延迟交易应用程序中,使用BigDecimal来表示价格和金额等任意精度数字。
我不会对它们进行太多的数学运算,所以问题不在于BigDecimal本身的性能,而在于大量的BigDecimal对象如何影响应用程序的性能。
我的担忧是,大量短暂存在的BigDecimal对象会给GC带来压力,并导致CMS收集器中更长的Stop-The-World暂停时间——这绝对是我想避免的。
请确认我的顾虑并建议使用BigD以外的替代方案。如果您认为我的顾虑是错误的,请解释一下原因。
更新:
感谢所有回答者。我现在相信使用BigDecimal会影响我的应用程序的延迟(尽管我仍然计划对其进行测量)。
目前我们决定坚持“非常非OOP”的解决方案(但没有精度损失)——使用两个int
,一个用于尾数,另一个用于指数。之所以采用这种方法,是因为基本类型被放置在栈上,而不是堆上,因此不受垃圾回收的影响。