gpt4 book ai didi

java - 使用 BigDecimal 将如何影响应用程序性能?

转载 作者:搜寻专家 更新时间:2023-10-30 19:51:00 25 4
gpt4 key购买 nike

我想使用 BigDecimal 来表示低延迟交易应用程序中的任意精度数字,例如每秒有数千个订单和执行报告的低延迟交易应用程序中的价格和金额。

我不会对它们进行很多数学运算,所以问题不在于 BigDecimal 本身的性能,而是关于大量 BigDecimal 对象会影响应用程序性能的程度。

我担心的是,大量短暂的 BigDecimal 对象会给 GC 带来压力,并导致 CMS 收集器中出现更大的 Stop-The-World 暂停 - 这绝对是我想要避免的。

您能否证实我的担忧并提出使用 BigD 的替代方案?另外,如果您认为我的担忧是错误的 - 请解释原因。

更新:

感谢所有回答的人。我现在确信使用 BigDecimal 会损害我的应用程序的延迟(即使我仍计划对其进行测量)。

暂时我们决定坚持使用“非常非 OOP”的解决方案(但不会影响准确性)- 使用两个 int,一个用于尾数,另一个用于指数。这背后的基本原理是原语放在堆栈上,而不是堆上,因此不受垃圾收集的影响。

最佳答案

如果您正在开发一个低延迟交易程序并且您真的想在延迟方面竞争,那么 BigDecimal 不适合您 , 它是如此简单。在微秒很重要的地方,对象创建和任何十进制数学都太昂贵了。

我认为,对于几乎其他人来说,使用 BigDecimal 是一个明智的选择,因为它对应用程序性能的影响很小可见 .

在做出交易决策的延迟关键系统中,任何不可预测的垃圾收集暂停都是完全不可能的,因此虽然当前的垃圾收集算法在正常使用中非常棒,但它们当 5 毫秒的延迟可能会花费您很多钱时,不一定合适。我希望大型系统是以非常非 OOP 风格编写的,除了一些内部字符串(用于代码等)之外很少或没有使用对象。

您肯定需要使用 double(甚至是 float)并确保准确性,或者使用 long 并以美分、十分之一美分或 satoshis(无论最小的记账单位是什么)来衡量所有金额。

关于java - 使用 BigDecimal 将如何影响应用程序性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1378044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com