我想使用BigDecimal在低延迟交易应用程序中表示任意精确数字,例如价格和金额,每秒有数千个订单和执行报告。如何使用BigDecimal会影响应用程序性能?
我不会对它们做很多数学运算,所以问题不在于BigDecimal本身的性能,而在于BigDecimal对象的大量性能会如何影响应用程序的性能。
我担心的是,大量短命的BigDecimal对象会给GC带来压力,并导致CMS收集器中更大的Stop-The-World暂停 - 这绝对是我想要避免的。
您能否确认我的疑虑并提出使用BigD的替代方案?另外,如果您认为我的担忧是错误的 - 请解释原因。
更新:
感谢所有谁回答。我现在确信使用BigDecimal会伤害我的应用程序的延迟(尽管我仍然计划对它进行测量)。
目前我们决定坚持使用“非OOP”解决方案(但没有准确性) - 使用两个int
s,一个用于尾数,另一个用于指数。这背后的原理是,基元被放置在栈上,而不是堆,因此不会被垃圾收集。
如果BidD不适合我,那么是什么?我不使用双打(因为它带来了浮点数的许多新问题 - 我使用的数字自然是小数)。 – vtrubnikov 2009-09-04 09:43:07
+1表示竞争表现的关键点。正如在关于老虎和跑步鞋的笑话中,绝对数字很少有什么重要的,比重要的还要好。 – soru 2009-09-04 09:53:18
@ valery_la99 - 我已添加到我的答案 – 2009-09-04 10:09:21