> Would it produce weak references?  I think not, right?

No. When I am talking about weak references I mean v8 API Handles that
were made weak with MakeWeak method.

--
Vyacheslav Egorov


On Thu, Sep 1, 2011 at 11:09 PM, Dennis H <gluck...@gmail.com> wrote:
> Hi Vyacheslav,
>
> I guess you are right: additional context is not really needed there.
> Let me
> try to remove it and see if it  improves GC.
>
> I am not really using any weak reachable objects explicitly. I am not
> sure though if they can be potentially be created in Javascript.
> My test case produces GC-collectable string in the endless loop...
>
> var task = require("task"),
>    x  = 1;
> for (var i = 0; i < 10 ; i++) {
>    var t = task.createTask(function() {
>       var r = "";
>       while (1)   {
>          r = "BB " + x;
>       }
>    });
>    console.log("Task created  "  + i);
>    t.run();
> }
>
> Would it produce weak references?  I think not, right?
>
> Thanks,
> Denis
>
> On Sep 1, 12:47 pm, Vyacheslav Egorov <vego...@chromium.org> wrote:
>> > 1. Can I transfer an function object from script compiled in global
>> > context and main thread Isolate into the other thread's Isolate and
>> > execute there?
>>
>> No. You have to serialize it somehow (e.g. JSON) in one isolate and
>> deserialize it in another one.
>>
>> > 2. If not, Is what I am doing a valid v8 API usage at all? What could
>> > be other ways to trigger GC more often?
>>
>> Seem valid to me. But I am a bit confused why forcing GC manually helps so 
>> much.
>>
>> It's not completely clear though why do you need a separate context
>> for your task because the function you pass as value (not as source)
>> already has a context attached and will use it but not the context you
>> have created.
>>
>> Another thing: do you use weak handles extensively? V8 might be
>> overflowed by weakly reachable objects. That might cost a lot
>> especially if those weakly reachable objects hold onto contexts which
>> you seem to allocate for each task.
>>
>> --
>> Vyacheslav Egorov
>>
>> On Thu, Sep 1, 2011 at 8:34 PM, Dennis H <gluck...@gmail.com> wrote:
>> > Hi Vyacheslav,
>>
>> > I see your point.
>>
>> > I don't use separate Isolate for each thread and all tasks use
>> > function objects compiled in the global Context/Isolate.
>> > This might be a trouble of course, but I was not sure there is a good
>> > way to create a function object
>> > in main Context and then transfer it to another Isolate/Context.
>>
>> > Essentially I wanted to achieve following usage:
>>
>> > // thread function
>> > function foo () {}
>>
>> > // starts execution in a separate thread
>> > task(foo);
>>
>> > I do make them run exclusively (at least I hope I do) by using
>>
>> >    Locker locker;
>> >    Locker::StartPreemption(preemption_interval);
>> >    HandleScope scope;
>>
>> >    context = Context::New();
>> >    context->Enter();
>>
>> > The code is in a fork from nodejs.You can see the code here:
>> >https://github.com/bfrancojr/node/blob/node-task/src/node_task.cc
>>
>> > The funny part is that if I create just a couple of threads the memory
>> > is stable, while I call V8::IdleNotification()  every 5 sec.
>>
>> > If I increase the number of tasks to 100 it will start to grow and
>> > the process will run out memory. However If I start to call
>> > V8::IdleNotification() every 0.3 seconds it fixes it again.
>>
>> > I've got a feeling the v8 treats the GC as one of the tasks, meaning
>> > that the more tasks I create the more time is allocated to 'garbage
>> > producers'
>> > and the smaller is a relative portion of time for GC. May be I am
>> > wrong.
>>
>> > So the questions are:
>>
>> > 1. Can I transfer an function object from script compiled in global
>> > context and main thread Isolate into the other thread's Isolate and
>> > execute there?
>> > 2. If not, Is what I am doing a valid v8 API usage at all? What could
>> > be other ways to trigger GC more often?
>>
>> > Thanks,
>> > Dennis
>>
>> > On Aug 31, 12:44 am, Vyacheslav Egorov <vego...@chromium.org> wrote:
>> >> Hi Dennis,
>>
>> >> V8's GC is stop-the-world type so you don't have to do anything
>> >> special to make it "keep up". If you are getting OOM that most
>> >> probably means you have a leak somewhere. Try tracing GC with
>> >> --trace-gc flag to see how heap grows.
>>
>> >> Also you can't run JavaScript in parallel on V8 unless you create
>> >> several isolates.
>>
>> >> If you are using a single isolate from many threads you have to ensure
>> >> that only one thread is executing JS at the given moment.
>>
>> >> --
>> >> Vyacheslav Egorov
>>
>> >> On Wed, Aug 31, 2011 at 2:28 AM, Dennis H <gluck...@gmail.com> wrote:
>> >> > Dear v8 Developers,
>>
>> >> > I am relatively new to v8 internals, but here is what I found:
>> >> > I tried to create an app which has multiple tasks running in parallel.
>> >> > The v8::internal::Thread API seems to work fine, the trouble is I
>> >> > didn't find a good way to make garbage collection to keep up.
>>
>> >> > I do call the V8::IdleNotification() in the main event loop
>> >> > periodically, but it doesn't scale if number of threads is getting
>> >> > bigger. Essentially If I create a lot of tasks, the process would
>> >> > reliably run out of memory pretty quick.
>>
>> >> > How is the garbage collection supposed to be handled correctly with
>> >> > multiple threads?
>>
>> >> > I used v3.4.14.
>>
>> >> > Thanks,
>> >> > Dennis
>>
>> >> > --
>> >> > v8-users mailing list
>> >> > v8-users@googlegroups.com
>> >> >http://groups.google.com/group/v8-users
>>
>> > --
>> > v8-users mailing list
>> > v8-users@googlegroups.com
>> >http://groups.google.com/group/v8-users
>
> --
> v8-users mailing list
> v8-users@googlegroups.com
> http://groups.google.com/group/v8-users
>

-- 
v8-users mailing list
v8-users@googlegroups.com
http://groups.google.com/group/v8-users

Reply via email to