From 521ad94278d9ddf416e17206cc54fe57ed5d11b0 Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Sat, 20 Sep 2025 03:09:04 +0700 Subject: [PATCH] the internal garbage collector now collects more garbage --- README.md | 2 +- ROADMAP.md | 1 - evolved.lua | 29 +++++++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ce81f36..76736da 100644 --- a/README.md +++ b/README.md @@ -1222,7 +1222,7 @@ builder_mt:destruction_policy :: id -> builder ## vX.X.X -- Nothing yet, stay tuned! +- The internal garbage collector now collects more garbage ## v1.2.0 diff --git a/ROADMAP.md b/ROADMAP.md index 22d102d..9d89f3b 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -5,7 +5,6 @@ - Improve the performance of required fragments by caching first-level required chunks. - Improve the performance of builders that are used multiple times by caching hint chunks. - Queries can cache major chunks to avoid finding them every time. -- Add a function to shrink storages to free unused memory. - observers and events - add INDEX fragment trait - use compact prefix-tree for chunks diff --git a/evolved.lua b/evolved.lua index 4edfc9f..19fde1a 100644 --- a/evolved.lua +++ b/evolved.lua @@ -5922,6 +5922,35 @@ function __evolved_collect_garbage() __release_table(__table_pool_tag.chunk_list, postorder_chunk_stack) end + for table_tag = 1, __table_pool_tag.__count do + local table_pool = __tagged_table_pools[table_tag] + for pool_index = 1, table_pool.__size do + table_pool[pool_index] = {} + end + end + + do + ---@type table + local new_entity_chunks = {} + + for entity_primary, entity_chunk in __lua_next, __entity_chunks do + new_entity_chunks[entity_primary] = entity_chunk + end + + __entity_chunks = new_entity_chunks + end + + do + ---@type table + local new_entity_places = {} + + for entity_primary, entity_place in __lua_next, __entity_places do + new_entity_places[entity_primary] = entity_place + end + + __entity_places = new_entity_places + end + __evolved_commit() end