Desidero utilizzare BigDecimal per rappresentare numeri arbitrari di precisione come i prezzi e gli importi in un'applicazione di trading a bassa latenza con migliaia di ordini e report di esecuzione al secondo.In che modo l'utilizzo di BigDecimal potrebbe influire sulle prestazioni dell'applicazione?
Non eseguirò molte operazioni matematiche su di essi, quindi la domanda non riguarda le prestazioni del BigDecimal in sé, ma piuttosto il modo in cui grandi volumi di oggetti BigDecimal influenzerebbero le prestazioni dell'applicazione.
La mia preoccupazione è che un'enorme quantità di oggetti BigDecimal di breve durata metterà a dura prova un GC e si tradurranno in pause più grandi di Stop-The-World nel raccoglitore CMS - e questo è sicuramente ciò che vorrei evitare.
Potete confermare le mie preoccupazioni e suggerire alternative all'utilizzo di BigD? Inoltre, se pensi che le mie preoccupazioni siano sbagliate, ti preghiamo di spiegarne il motivo.
Aggiornamento:
Grazie per tutti coloro che hanno risposto. Ora sono convinto che l'utilizzo di BigDecimal danneggerà la latenza della mia applicazione (anche se ho ancora intenzione di misurarla).
Per il momento abbiamo deciso di rimanere con la soluzione "molto non-OOP" (ma senza colpo di precisione) - utilizzare due int
s, uno per la mantissa e un altro per l'esponente. La logica alla base di questo è che le primitive vengono messe in pila, non heap, e quindi non sono soggette alla garbage collection.
Se BidD non è per me, allora cos'è? Io non uso i doppi (dato che porta molti nuovi problemi con i numeri in virgola mobile - i numeri con cui lavoro sono naturalmente decimali). – vtrubnikov
+1 per aver affermato il punto chiave sulla competizione in termini di prestazioni. Come nella battuta sulla tigre e le scarpe da corsa, i numeri assoluti raramente contano molto, meglio di/peggio di ciò che conta. – soru
@ valery_la99 - Ho aggiunto alla mia risposta –