I've heard that one of the "secrets" of the Google V8 engine speed is the typing of the JS vars, from double to the type the jit guesses when a variable take some value. That's because normally a program won't use an already defined variable as another type of variable. Do you know if Firefox uses a similar behavior in its JS compiler?
Yes, they've had that for years: https://wiki.mozilla.org/TypeInference
Originally Posted by kertoxol
wow, this is huge. It's the culmination of years of work, and I'm happy to see it finally enabled by default. Hopefully it will stay this way, and reach stable with Firefox 31.
For anyone curious, this is (was) the second most important bug on the memshrink bug list: https://blog.mozilla.org/nnethercote...-2nd-birthday/
And for anyone wondering why this is important (from https://blog.mozilla.org/nnethercote...nsumption-2/):
By memory, now the next big thing should be e10s
- Performance improves for three reasons. First, paging is reduced because of the generational behaviour: much of the JS engine activity occurs in the nursery, which is small; in other words, the memory activity is concentrated within a smaller part of the working set. Second, paging is further reduced because of the compaction: this reduces fragmentation within pages in the tenured heap, reducing the total working set size. Third, the tenured heap grows more slowly because of the generational behaviour: many objects are collected earlier (in the nursery) than they would be with a non-generational collector, which means that structure traversals done by the garbage collector (during full-heap collections) and cycle collector are faster.
- Virtual memory consumption drops in two ways. First, the compaction minimizes waste due to fragmentation. Second, the heap grows more slowly.
- Physical memory consumption drops for the same two reasons.
- Private bytes also drops for the same two reasons.
Firefox has had this behaviour for a long time now in different incarnations: TraceMonkey from Firefox 3, JaegerMonkey and more recently IonMonkey.
Originally Posted by kertoxol
Knowing the type information, the JS engine can use that to say e.g. "this variable is an integer". Therefore, it can convert the code to assembly instructions for maximum performance (with guards if the variable type changes). This is the process of JIT compiling the code. Other languages like Java and C# have static types so can more predictably JIT compile code and do so up-front.
For instance, Have the Yahoo Sports with March madness in one tab, have two Huffingtonpost Tabs open, with the top level of either major subsection [Root level reloads constantly, Politics, Media, Tech, etc., also reload updates routinely every 30 seconds] and you've got an app who comes to a completely frozen experience.
Fix that and I'll be impressed.
For what is worth, I don't have any problems with that, with both Firefox Stable and Nightly: http://a.pomf.se/bqsgcn.png
Originally Posted by Marc Driftmeyer
I get the occasional spike when one of those pages refresh, but both browsers don't froze at all.
(For anyone wondering, Stable has a much higher memory usage because I have a lot of tabs open in a different window).
Have you reported the problem over bugzilla?
And here I am with 14 tabs opened in chromium using 2gb of memory.
3G6A5W338E - Horton/BO$$ is that you? I was wondering how many days would go by without your vitriol posts.
Oh well, another name to add to the ignore list.
Are there any actual benchmarks at this point to show the difference in memory consumption for this new generational GC? This might actually help an issue I've been having these past few years where long running sessions of firefox utilize an excessive amount of memory (i've had it run well past 4GB (so glad my desktop has 16GB of ram...)) and the browser slows down to an utter crawl regardless of the number of tabs open.