Currently, I found the following problems (so far, last update 18/01, 17h30, fix in progress):
- the LocalTxInvocationContext is creating an empty map every time a new instance is created. It originates >10GB of data in 5min. It can use the Collections.emptyMap()
- TransactionCoordinator is creating LocalTxInvocationContext twice when commit. First, prepare() method creates LocalTxInvocationContext and if it is read only, it invokes commitInternal (that will create a new LocalTxInvocationContext). The same for commit() method when the transaction is one phase. commitInternal() can reuse the LocalTxInvocationContext since they are stateless (and they already have a reference for the LocalTransaction).
- Refactor LocalTxInvocationContext and RemoteTxInvocationContext
Results (for 5 min profiling):
- HashMap allocation reduced from 20.80GB to 3.76GB
- LocalTxInvocationContext allocation reduced from 13.80GB to 7.44GB