Hashmap heads are randomly accessed during read and write. So they must be memory resident or head paging becomes an issue. During a milestone run it’s all write, no table lookups. During validation we are reading all tables, but the design lints hashmap searching to a very limited amount. Neither block population nor prevout population search the massive point table. So validation in a 5k block window operates efficiently within the remaining 16GB, completing in 7.5 hrs without double spend checks.