📝 add comments
Nasal Interpreter Test / mac-aarch64 (push) Waiting to run Details
Nasal Interpreter Test / linux-x86_64 (push) Waiting to run Details

This commit is contained in:
ValKmjolnir 2025-03-15 02:14:44 +08:00
parent a85a4e37c1
commit a83978c553
2 changed files with 31 additions and 9 deletions

View File

@ -13,14 +13,14 @@ void gc::do_mark_sweep() {
} }
auto mark_end = clk::now(); auto mark_end = clk::now();
sweep(); sweep();
// if (!in_sweep_stage) {
// for (auto i : memory) {
// if (i->mark == nas_val::gc_status::found) {
// i->mark = nas_val::gc_status::uncollected;
// }
// }
// }
auto sweep_end = clk::now(); auto sweep_end = clk::now();
if (!in_sweep_stage) {
for (auto i : memory) {
if (i->mark == nas_val::gc_status::found) {
i->mark = nas_val::gc_status::uncollected;
}
}
}
auto total_time = (sweep_end-begin).count(); auto total_time = (sweep_end-begin).count();
auto mark_time = (mark_end-begin).count(); auto mark_time = (mark_end-begin).count();
@ -208,6 +208,7 @@ void gc::sweep() {
in_sweep_stage = false; in_sweep_stage = false;
current_sweep_index = 0; current_sweep_index = 0;
} }
return;
} }
void gc::extend(const vm_type type) { void gc::extend(const vm_type type) {
@ -444,13 +445,18 @@ void gc::info() const {
var gc::alloc(const vm_type type) { var gc::alloc(const vm_type type) {
const u32 index = static_cast<u32>(type)-static_cast<u32>(vm_type::vm_str); const u32 index = static_cast<u32>(type)-static_cast<u32>(vm_type::vm_str);
++alloc_count[index]; ++alloc_count[index];
if (unused[index].empty()) { // if still in incremental sweep stage? do it
// if not in incremental sweep stage, run a new gc cycle
if (in_sweep_stage || unused[index].empty()) {
++gc_count[index]; ++gc_count[index];
do_mark_sweep(); do_mark_sweep();
} }
// if in incremental sweep stage, but the unused list is empty,
// do it until the unused list has something
while (unused[index].empty() && in_sweep_stage) { while (unused[index].empty() && in_sweep_stage) {
do_mark_sweep(); do_mark_sweep();
} }
// after all gc stages, still get empty list, extend
if (unused[index].empty()) { if (unused[index].empty()) {
extend(type); extend(type);
} }

View File

@ -31,7 +31,7 @@ var test_func = func(test_processes...) {
println("+----------------------"); println("+----------------------");
} }
var MAX_ITER_NUM = 5e4; var MAX_ITER_NUM = 1e5;
var append_vec = func { var append_vec = func {
var res = []; var res = [];
@ -132,6 +132,22 @@ for (var i = 0; i < 10; i += 1) {
append_hash_vec_hash, append_hash_vec_hash,
append_hash_vec_hash, append_hash_vec_hash,
append_tree,
append_tree,
append_tree,
append_hash_vec_hash,
append_hash_vec_hash,
append_hash_vec_hash,
append_tree,
append_tree,
append_tree,
append_hash_vec_hash,
append_hash_vec_hash,
append_hash_vec_hash,
append_tree, append_tree,
append_tree, append_tree,
append_tree append_tree