我想使用 BigDecimal 来表示任意精度数字,例如在每秒具有数千个订单和执行报告的低延迟交易应用程序中的价格和金额。
我不会对它们做很多数学运算,所以问题不在于 BigDecimal 本身的性能,而在于 BigDecimal 对象的大容量会影响应用程序的性能。
我担心的是,大量的短期 BigDecimal 对象会给 GC 带来压力,并导致 CMS 收集器中出现更大的 Stop-The-World 停顿——这绝对是我想要避免的。
您能否确认我的担忧并提出使用 BigD 的替代方案?另外,如果您认为我的担忧是错误的 - 请解释原因。
更新:
感谢所有回答的人。我现在确信使用 BigDecimal 会损害我的应用程序的延迟(即使我仍打算测量它)。
目前,我们决定坚持使用“非常非 OOP”的解决方案(但不会影响准确性) - 使用两个int
s,一个用于尾数,另一个用于指数。这背后的基本原理是原语放置在堆栈上,而不是堆上,因此不受垃圾收集的影响。