📝 add comments
This commit is contained in:
parent
a85a4e37c1
commit
a83978c553
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue