Hi Kasper, Yes, we use the old version. I checked the new v8 source and the full GC is removed from creating new context. Thanks for the reminder.
Then I have other questions? 1. It seems that without GC creating context will be faster, but, I wonder if it just moved the cost from here to other places. 2. What's the reason to remove GC from creating new context? 3. Where can I get the benchmark data between different v8 versions? Thanks again! Kenny 2010/12/4 Kasper Lund <[email protected]> > Hua ye, > > Which version of V8 are you using? The current version of V8 does not > invoke the garbage collector when creating new contexts and it hasn't > since r4003 which was submitted in early March, 2010. > > Cheers, > Kasper > > On Sat, Dec 4, 2010 at 6:05 AM, hua ye <[email protected]> wrote: > > Dears, > > > > Is there any way to boost the speed of v8 GC? > > From my profiling when v8 creates a new context, it will execute a > > full GC if the old context is disposed. The full GC costs most of the > > time. > > > > Is there any idea to boost this, the following is my profiling result: > > > > Persistent<Context> v8::Context::New( > > v8::ExtensionConfiguration* extensions, > > v8::Handle<ObjectTemplate> global_template, > > v8::Handle<Value> global_object) { > > EnsureInitialized("v8::Context::New()"); > > LOG_API("Context::New"); > > ON_BAILOUT("v8::Context::New()", return Persistent<Context>()); > > > > // Enter V8 via an ENTER_V8 scope. > > i::Handle<i::Context> env; > > { > > ENTER_V8; > > #if defined(ANDROID) > > // On mobile device, full GC is expensive, leave it to the system > > to > > // decide when should make a full GC. > > #else > > // Give the heap a chance to cleanup if we've disposed contexts. > > > > i::Heap::CollectAllGarbageIfContextDisposed(); > // > > ******** Most of the time here > > #endif > > > > ...... > > ...... > > ...... > > > > // Create the environment. > > env = > > i::Bootstrapper::CreateEnvironment( //%%%% > > % create environment costs also too much time > > Utils::OpenHandle(*global_object), > > proxy_template, > > extensions); > > > > // Restore the access check info on the global template. > > if (!global_template.IsEmpty()) { > > ASSERT(!global_constructor.is_null()); > > ASSERT(!proxy_constructor.is_null()); > > global_constructor->set_access_check_info( > > proxy_constructor->access_check_info()); > > global_constructor->set_needs_access_check( > > proxy_constructor->needs_access_check()); > > } > > } > > // Leave V8. > > > > if (env.is_null()) > > return Persistent<Context>(); > > return Persistent<Context>(Utils::ToLocal(env)); > > } > > > > -- > > v8-users mailing list > > [email protected] > > http://groups.google.com/group/v8-users > > > > -- > v8-users mailing list > [email protected] > http://groups.google.com/group/v8-users > -- v8-users mailing list [email protected] http://groups.google.com/group/v8-users
