moved global state from data_gc into vm
parent
80716a1b6e
commit
3025cef1c6
|
@ -3,36 +3,6 @@
|
||||||
namespace factor
|
namespace factor
|
||||||
{
|
{
|
||||||
|
|
||||||
/* used during garbage collection only */
|
|
||||||
zone *newspace;
|
|
||||||
bool performing_gc;
|
|
||||||
bool performing_compaction;
|
|
||||||
cell collecting_gen;
|
|
||||||
|
|
||||||
/* if true, we are collecting aging space for the second time, so if it is still
|
|
||||||
full, we go on to collect tenured */
|
|
||||||
bool collecting_aging_again;
|
|
||||||
|
|
||||||
/* in case a generation fills up in the middle of a gc, we jump back
|
|
||||||
up to try collecting the next generation. */
|
|
||||||
jmp_buf gc_jmp;
|
|
||||||
|
|
||||||
gc_stats stats[max_gen_count];
|
|
||||||
u64 cards_scanned;
|
|
||||||
u64 decks_scanned;
|
|
||||||
u64 card_scan_time;
|
|
||||||
cell code_heap_scans;
|
|
||||||
|
|
||||||
/* What generation was being collected when copy_code_heap_roots() was last
|
|
||||||
called? Until the next call to add_code_block(), future
|
|
||||||
collections of younger generations don't have to touch the code
|
|
||||||
heap. */
|
|
||||||
cell last_code_heap_scan;
|
|
||||||
|
|
||||||
/* sometimes we grow the heap */
|
|
||||||
bool growing_data_heap;
|
|
||||||
data_heap *old_data_heap;
|
|
||||||
|
|
||||||
void factorvm::init_data_gc()
|
void factorvm::init_data_gc()
|
||||||
{
|
{
|
||||||
performing_gc = false;
|
performing_gc = false;
|
||||||
|
|
|
@ -10,14 +10,6 @@ struct gc_stats {
|
||||||
u64 bytes_copied;
|
u64 bytes_copied;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern zone *newspace;
|
|
||||||
|
|
||||||
extern bool performing_compaction;
|
|
||||||
extern cell collecting_gen;
|
|
||||||
extern bool collecting_aging_again;
|
|
||||||
|
|
||||||
extern cell last_code_heap_scan;
|
|
||||||
|
|
||||||
void init_data_gc();
|
void init_data_gc();
|
||||||
|
|
||||||
void gc();
|
void gc();
|
||||||
|
@ -41,8 +33,6 @@ void clear_gc_stats();
|
||||||
PRIMITIVE(clear_gc_stats);
|
PRIMITIVE(clear_gc_stats);
|
||||||
PRIMITIVE(become);
|
PRIMITIVE(become);
|
||||||
|
|
||||||
extern bool growing_data_heap;
|
|
||||||
|
|
||||||
|
|
||||||
VM_ASM_API void inline_gc(cell *gc_roots_base, cell gc_roots_size);
|
VM_ASM_API void inline_gc(cell *gc_roots_base, cell gc_roots_size);
|
||||||
|
|
||||||
|
|
30
vm/vm.hpp
30
vm/vm.hpp
|
@ -170,6 +170,36 @@ struct factorvm {
|
||||||
|
|
||||||
|
|
||||||
//data_gc
|
//data_gc
|
||||||
|
/* used during garbage collection only */
|
||||||
|
zone *newspace;
|
||||||
|
bool performing_gc;
|
||||||
|
bool performing_compaction;
|
||||||
|
cell collecting_gen;
|
||||||
|
|
||||||
|
/* if true, we collecting aging space for the second time, so if it is still
|
||||||
|
full, we go on to collect tenured */
|
||||||
|
bool collecting_aging_again;
|
||||||
|
|
||||||
|
/* in case a generation fills up in the middle of a gc, we jump back
|
||||||
|
up to try collecting the next generation. */
|
||||||
|
jmp_buf gc_jmp;
|
||||||
|
|
||||||
|
gc_stats stats[max_gen_count];
|
||||||
|
u64 cards_scanned;
|
||||||
|
u64 decks_scanned;
|
||||||
|
u64 card_scan_time;
|
||||||
|
cell code_heap_scans;
|
||||||
|
|
||||||
|
/* What generation was being collected when copy_code_heap_roots() was last
|
||||||
|
called? Until the next call to add_code_block(), future
|
||||||
|
collections of younger generations don't have to touch the code
|
||||||
|
heap. */
|
||||||
|
cell last_code_heap_scan;
|
||||||
|
|
||||||
|
/* sometimes we grow the heap */
|
||||||
|
bool growing_data_heap;
|
||||||
|
data_heap *old_data_heap;
|
||||||
|
|
||||||
void init_data_gc();
|
void init_data_gc();
|
||||||
object *copy_untagged_object_impl(object *pointer, cell size);
|
object *copy_untagged_object_impl(object *pointer, cell size);
|
||||||
object *copy_object_impl(object *untagged);
|
object *copy_object_impl(object *untagged);
|
||||||
|
|
Loading…
Reference in New Issue