<div dir="ltr"><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)">Thanks Andreas, that's helpful to know. In general, is there some way to keep a list (adding removing things over time) while avoiding GC?</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)">For example, I thought I could place and remove items into a list (f.e. Set or Map, while having my own references to all the items and the list and outside of the list as well as to the list itself), but as you pointed out that still can have need for GC.</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)">I know you said</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style=""><font color="#000000" face="georgia, serif">> In general, there is very little you can do in JavaScript that does not potentially cause allocation and thus GC</font></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)">But, I would at least want to know that I minimized GC as much as possible. My first hunch (for my case) would be to make a linked list out of the items I need to have a "list" of, where each item's link (reference) to the next item is also one of the references that I already hold outside of the list? </div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)">It seems that with Arrays (and Sets and Maps) that deleting an item from the list also deletes the placeholder that was used for that item (in the case of Array, the placeholders would be the numerical keys that are deleted when an item is popped for example), and I'm guessing (with my still expanding VM knowledge) that those placeholders are GCed separately from the thing that was referenced to by the placeholder (so even if the placeholder contained `null` there would still be GC). Is that a good guess?</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)">I'll be experimenting...</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, May 9, 2016 at 2:28 AM, Andreas Rossberg <span dir="ltr"><<a href="mailto:rossberg@google.com" target="_blank">rossberg@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">The `undefined` value is represented in exactly the same way as `true`, `false`, and `null` in V8. They're so called "oddballs" internally, global values that are neither allocated nor freed.<div><br></div><div>Either way, the key/values of a (regular) map do not keep anything alive about the map. Adding or removing entries from a set or map can of course cause allocation/deallocation, regardless of the keys/values themselves. (Similarly if you are using regular objects as maps, btw.)</div><div><br></div><div>There are also lots of other things that cause allocation/deallocation under the hood of a JavaScript engine, e.g. compilation, optimisation, deoptimisation, etc. Some of that predominantly happens at start-up. If you want to reduce random noise from your experiments, try to warm up the code first. But even then, don't read too much into micro-benchmarks -- JS VMs are far too complicated, dynamic, and heuristics-based to draw useful conclusions from tiny tests (that's e.g. why JSPerf tests are often bollocks).</div><div><br></div><div>In general, there is very little you can do in JavaScript that does not potentially cause allocation and thus GC. Certainly nothing involving dynamic data structures.</div><div><br></div><div>/Andreas</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 5 May 2016 at 07:48, /#!/JoePea <span dir="ltr"><<a href="mailto:joe@trusktr.io" target="_blank">joe@trusktr.io</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><span><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)">> <span style="font-size:12.8px;font-family:arial,sans-serif;color:rgb(34,34,34)">The only v8 shell I have lying around is too old (3.14.5.10) to have Set, so I can't tell you what it would do.</span></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)"><br></div></span><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)">On my first attempt, I noticed 8 Major GCs: <a href="https://cloud.githubusercontent.com/assets/297678/15036715/f41ea4d4-1247-11e6-8823-f153c3c1b7bb.png" target="_blank">https://cloud.githubusercontent.com/assets/297678/15036715/f41ea4d4-1247-11e6-8823-f153c3c1b7bb.png</a></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)">On second attempt, no Major GCs: <a href="https://cloud.githubusercontent.com/assets/297678/15036788/c066483a-1248-11e6-970b-3f9d20710bbc.png" target="_blank">https://cloud.githubusercontent.com/assets/297678/15036788/c066483a-1248-11e6-970b-3f9d20710bbc.png</a></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)">I wonder why. I'm in Chrome 50.</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)">So, the second attempt looks good. I'm not sure why the first is so different. I tried it a few times, but I only got that Major GC zig-zag the first time.</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:rgb(0,0,0)">Thanks for pointing out Set!</div></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, May 4, 2016 at 7:30 PM, Boris Zbarsky <span dir="ltr"><<a href="mailto:bzbarsky@mit.edu" target="_blank">bzbarsky@mit.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span>On 5/4/16 5:03 PM, Steve Fink wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
The only v8 shell I have lying around is too old (3.14.5.10) to have<br>
Set, so I can't tell you what it would do.<br>
</blockquote>
<br></span>
I have v8 "4.8.0 (candidate)" (meaning whatever rev I checked out), and it does 1163 minor ("Scavenge") GCs on your testcase.  It also does 1163 minor GCs if I take out the add() calls.  It does none if I remove the clear() calls, no matter whether the add() calls are there or not.<br>
<br>
-Boris<br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div>