Hi Xiang,

the heap resources should still be reclaimed if you call v8::V8::Dispose().

-- Mads

On Wed, Nov 25, 2009 at 12:03 PM, Xiang Zhong <[email protected]> wrote:
> Hi, Mads and Erik,
>
> If OOM happens, Are those heap resources still can be reclaimed if we call
> v8::V8::Dispose()?
>
> Or there would be memory leak until we exit the process?
>
> Cheers~
> Xiang
>
>
> On Wed, Nov 25, 2009 at 4:31 PM, Xiang Zhong <[email protected]> wrote:
>>
>> Hi, Erik,
>> Yes, you are right.
>> I confuse setting heap limit with setting stack limit, which have to be
>> set seperately by the doc for the latter.
>> thanks~
>> /**
>>  * A set of constraints that specifies the limits of the runtime's memory
>> use.
>>  * You must set the heap size before initializing the VM - the size cannot
>> be
>>  * adjusted after the VM is initialized.
>>  *
>>  * If you are using threads then you should hold the V8::Locker lock while
>>  * setting the stack limit and you must set a non-default stack limit
>> separately
>>  * for each thread.
>>  */
>> class V8EXPORT ResourceConstraints {
>>
>>
>> On Wed, Nov 25, 2009 at 4:22 PM, Erik Corry <[email protected]> wrote:
>>>
>>> 2009/11/25 Xiang Zhong <[email protected]>:
>>> > Suppose they speficy heap constraint seperately
>>> > with SetResourceConstraints(ResourceConstraints* constraints)
>>>
>>> You can only use that interface once to set the heap size (and you
>>> have to do it before initializing V8).  It applies to all threads.
>>>
>>> >
>>> >
>>> > 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
-~----------~----~----~----~------~----~------~--~---

Reply via email to