Suppose they speficy heap constraint seperately with SetResourceConstraints(ResourceConstraints* constraints)
On Wed, Nov 25, 2009 at 4:15 PM, Xiang Zhong <[email protected]> wrote: > Hi, Mads, > > > Yeah, I see. Thanks for your answer. > > Another question :-), if we enable multi-thread by v8::V8::Locker, will > other threads dead too if one thread encounter OOM? > > > Sincerely~ > Xiang > > > > > On Wed, Nov 25, 2009 at 3:54 PM, Mads Sig Ager <[email protected]> wrote: > >> >> Nothing like that exists. We do not know in advance that we are going >> to run out of memory. >> >> -- Mads >> >> On Wed, Nov 25, 2009 at 8:52 AM, Xiang Zhong <[email protected]> wrote: >> > >> > Hi, Mads, >> > >> > Is there a way that the caller can get notified before an OOM situation >> > happen? >> > If that is possible, the caller can call v8::V8::TerminateExecution() >> > beforehand, and dispose the global object in time to free memory. >> > That will save v8 from being dead or crashing. >> > >> > We can hook a callback through SetGlobalGCEpilogueCallback() after GC >> > happen, if we can get a flag some like " >> GC_FAIL_GOING_TO_OUT_OF_MEMORY", >> > then it is possible to check the flag and terminate in time. >> > Does there exist something like that? >> > >> > Wishes~ >> > Xiang >> > >> > On Wed, Nov 25, 2009 at 3:35 PM, Mads Sig Ager <[email protected]> >> wrote: >> >> >> >> An out of memory situation can leave the VM in an inconsistent state, >> >> so it is not possible to continue. It is therefore the expected >> >> behavior that we cannot continue here. >> >> >> >> Cheers, -- Mads >> >> >> >> On Wed, Nov 25, 2009 at 3:45 AM, Xiang <[email protected]> wrote: >> >> > >> >> > Hi, All, >> >> > >> >> > I have declared v8::V8::IgnoreOutOfMemoryException(), and the out of >> >> > memory exception is caught by trycatch as expected. >> >> > >> >> > However, after disposing the current context, we can't create a new >> >> > context. >> >> > >> >> > The handle is empty. >> >> > >> >> > Please check the following UT case: >> >> > >> >> > Reproduction steps >> >> > --------------------------------------------------------- >> >> > Please add the following case to test-api.cc, >> >> > >> >> > When creating a new context, >> >> > v8::Persistent<v8::Context> context = v8::Context::New(0, >> >> > v8::Handle<v8::ObjectTemplate>(), v8::Handle<v8::Value>()); >> >> > It will fail >> >> > >> >> > TEST(CreateNewContextAfterOutOfMemory) { >> >> > // It's not possible to read a snapshot into a heap with >> >> > different >> >> > dimensions. >> >> > if (v8::internal::Snapshot::IsEnabled()) return; >> >> > // Set heap limits. >> >> > static const int K = 1024; >> >> > v8::ResourceConstraints constraints; >> >> > constraints.set_max_young_space_size(256 * K); >> >> > constraints.set_max_old_space_size(4 * K * K); >> >> > v8::SetResourceConstraints(&constraints); >> >> > >> >> > // Execute a script that causes out of memory. >> >> > v8::HandleScope scope; >> >> > { >> >> > LocalContext context; >> >> > v8::V8::IgnoreOutOfMemoryException(); >> >> > Local<Script> script = >> >> > Script::Compile(String::New(js_code_causing_out_of_memory)); >> >> > Local<Value> result = script->Run(); >> >> > >> >> > // Check for out of memory state. >> >> > CHECK(result.IsEmpty()); >> >> > CHECK(context->HasOutOfMemoryException()); >> >> > } >> >> > >> >> > { >> >> > v8::Persistent<v8::Context> context = v8::Context::New(0, >> >> > v8::Handle<v8::ObjectTemplate>(), v8::Handle<v8::Value>()); >> >> > >> >> > >> >> > //Check here! >> >> > >> >> > //I think we should be allowed to create a new context >> >> > //And the Handle should not be empty >> >> > CHECK(!context.IsEmpty()); >> >> > context.Dispose(); >> >> > context.Clear(); >> >> > } >> >> > } >> >> > > >> >> > >> > >> > >> > >> > > >> > >> >> >> >> > --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
