mirror of
https://github.com/Samsung/escargot.git
synced 2026-06-22 10:01:50 +00:00
Implement lazy-creation of arguments object. (#361)
* Store ArgumentsObject into Env record with functionObject * Introduce gc memory leak checker * Don't save stack pointer in ArgumentsObject Signed-off-by: seonghyun kim <sh8281.kim@samsung.com>
This commit is contained in:
parent
1d143c3871
commit
ad0cecbd0d
18 changed files with 238 additions and 53 deletions
|
|
@ -82,6 +82,38 @@ NEVER_INLINE bool eval(Escargot::Context* context, Escargot::String* str, Escarg
|
|||
return true;
|
||||
}
|
||||
|
||||
void doFullGCWithoutSeeingStack()
|
||||
{
|
||||
GC_register_mark_stack_func([]() {
|
||||
// do nothing for skip stack
|
||||
// assume there is no gc-object on stack
|
||||
});
|
||||
GC_gcollect();
|
||||
GC_gcollect();
|
||||
GC_gcollect_and_unmap();
|
||||
GC_register_mark_stack_func(nullptr);
|
||||
}
|
||||
|
||||
void printEveryReachableGCObjects()
|
||||
{
|
||||
ESCARGOT_LOG_INFO("print reachable pointers -->\n");
|
||||
GC_gcollect();
|
||||
GC_disable();
|
||||
GC_enumerate_reachable_objects_inner(
|
||||
[](void* obj, size_t bytes, void* cd) {
|
||||
size_t size;
|
||||
int kind = GC_get_kind_and_size(obj, &size);
|
||||
void* ptr = GC_USR_PTR_FROM_BASE(obj);
|
||||
ESCARGOT_LOG_INFO("@@@ kind %d pointer %p size %d\n", (int)kind, ptr, (int)size);
|
||||
#if !defined(NDEBUG)
|
||||
GC_print_backtrace(ptr);
|
||||
#endif
|
||||
},
|
||||
nullptr);
|
||||
GC_enable();
|
||||
ESCARGOT_LOG_INFO("<-- end of print reachable pointers\n");
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
#ifndef NDEBUG
|
||||
|
|
@ -173,5 +205,12 @@ int main(int argc, char* argv[])
|
|||
Escargot::Heap::printGCHeapUsage();
|
||||
}
|
||||
|
||||
/*
|
||||
// remove comment you want to find memory leak
|
||||
doFullGCWithoutSeeingStack();
|
||||
doFullGCWithoutSeeingStack();
|
||||
doFullGCWithoutSeeingStack();
|
||||
printEveryReachableGCObjects();
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue