It was further optimized to use as little memory allocations as needed, we achieved this by re-using many of the application objects (accounts, transactions, blocks etc but also many of the raw byte arrays) and instead of recreating new objects while the app is running we try and re-use existing objects by repopulating their fields and data.