Quiero utilizar BigDecimal para representar números de precisión arbitrarios como precios y cantidades en una aplicación de negociación de baja latencia con miles de pedidos e informes de ejecución por segundo.¿Cómo afectaría BigDecimal el rendimiento de la aplicación?
No haré muchas operaciones matemáticas en ellas, por lo que la pregunta no es sobre el rendimiento del BigDecimal per se, sino sobre cómo los grandes volúmenes de objetos BigDecimal afectarían el rendimiento de la aplicación.
Mi preocupación es que la gran cantidad de objetos BigDecimal efímeros afectará a un GC y provocará pausas Stop-The-World más grandes en el colector CMS, y esto es definitivamente lo que me gustaría evitar.
¿Pueden confirmar mis dudas y sugerir alternativas al uso de BigD? Además, si cree que mis preocupaciones son incorrectas, explique por qué.
actualización:
Gracias por todos los que respondieron. Ahora estoy convencido de que el uso de BigDecimal perjudicará la latencia de mi aplicación (aunque aún planeo medirla).
Por el momento decidimos seguir con la solución "muy no-OOP" (pero sin precisión): use dos int
s, uno para mantissa y otro para exponente. La razón detrás de esto es que los primitivos se colocan en la pila, no en el montón, y por lo tanto no están sujetos a la recolección de basura.
Si BidD no es para mí, ¿qué es, entonces? No uso dobles (ya que traen un montón de nuevos problemas con coma flotante, los números con los que opero son decimales). – vtrubnikov
+1 para establecer el punto clave sobre competir en el rendimiento. Como en el chiste sobre el tigre y las zapatillas para correr, los números absolutos rara vez importan mucho, mejor que/peor de lo que cuenta. – soru
@ valery_la99 - He agregado mi respuesta –