@@ -1097,18 +1097,15 @@ struct ZGenStats {
10971097
10981098void ZPageAllocator::free_pages (const ZArray<ZPage*>* pages) {
10991099 ZArray<ZMemoryRange> to_cache;
1100- ZPerNUMA<ZGenStats> gen_stats;
1100+
1101+ // All pages belong to the same generation, so either only young or old.
1102+ const ZGenerationId gen_id = pages->first ()->generation_id ();
1103+ size_t gen_size = 0 ;
11011104
11021105 // Prepare memory from pages to be cached before taking the lock
11031106 ZArrayIterator<ZPage*> pages_iter (pages);
11041107 for (ZPage* page; pages_iter.next (&page);) {
1105- const int numa_id = _virtual.get_numa_id (page->virtual_memory ());
1106- if (page->is_young ()) {
1107- gen_stats.get (numa_id).young_size += page->size ();
1108- } else {
1109- gen_stats.get (numa_id).old_size += page->size ();
1110- }
1111-
1108+ gen_size += page->size ();
11121109 prepare_memory_for_free (page, &to_cache, true /* allow_defragment */ );
11131110 }
11141111
@@ -1118,17 +1115,13 @@ void ZPageAllocator::free_pages(const ZArray<ZPage*>* pages) {
11181115 ZArrayIterator<ZMemoryRange> iter (&to_cache);
11191116 for (ZMemoryRange vmem; iter.next (&vmem);) {
11201117 ZCacheState& state = state_from_vmem (vmem);
1121-
11221118 state.decrease_used (vmem.size ());
11231119 state._cache .insert_mapping (vmem);
11241120 }
11251121
11261122 for (int numa_id = 0 ; numa_id < (int )ZNUMA::count (); numa_id++) {
11271123 ZCacheState& state = _states.get (numa_id);
1128- ZGenStats& stats = gen_stats.get (numa_id);
1129-
1130- state.decrease_used_generation (ZGenerationId::young, stats.young_size );
1131- state.decrease_used_generation (ZGenerationId::old, stats.old_size );
1124+ state.decrease_used_generation (gen_id, gen_size);
11321125 }
11331126
11341127 // Try satisfy stalled allocations
0 commit comments