{"id":2798,"date":"2014-01-20T16:51:20","date_gmt":"2014-01-20T05:51:20","guid":{"rendered":"http:\/\/blog.mozilla.org\/nnethercote\/?p=2798"},"modified":"2014-01-20T19:54:13","modified_gmt":"2014-01-20T08:54:13","slug":"a-big-step-towards-generational-and-compacting-gc","status":"publish","type":"post","link":"https:\/\/blog.mozilla.org\/nnethercote\/2014\/01\/20\/a-big-step-towards-generational-and-compacting-gc\/","title":{"rendered":"A big step towards generational and compacting GC"},"content":{"rendered":"<p>People frequently ask me for status updates on generational GC, and I usually say I&#8217;ll tell them when something notable happens. Well, something notable just happened: <a href=\" https:\/\/groups.google.com\/forum\/#!topic\/mozilla.dev.platform\/pWuGWdZgQL0\">exact rooting landed<\/a>.<\/p>\n<p>What is exact rooting? In order to support generational and\/or compacting GC, you need to be able to move GC-allocated things such as objects around. This means you can&#8217;t have raw C++ pointers to any objects that might move; instead, you need some kind of indirect pointer that can be updated when necessary.<\/p>\n<p>Unfortunately, both the JS engine and Gecko have a <em>lot<\/em> of pointers to GC-allocated things. The process of checking and converting them has been the main part of a task called &#8220;exact rooting&#8221;, and that&#8217;s what just finished. This has required an enormous amount of what is essentially very tedious work. Jim Blandy summarized it nicely, as follows.<\/p>\n<blockquote><p>I&#8217;ve never heard of a major project escaping from conservative GC once it had entered that state of sin; nor have I heard of anyone implementing a moving collector after starting with a non-moving collector. So, doing *both* is impressive. I hope it pays off big!<\/p><\/blockquote>\n<p>Major kudos to Terrence Cole, Steve Fink, Jon Coppeard, Brian Hackett, and the small army of other helpers who did this. Now that they&#8217;ve finished eating this gigantic serving of vegetables, they can move onto dessert, i.e. making the GC generational and compacting.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>People frequently ask me for status updates on generational GC, and I usually say I&#8217;ll tell them when something notable happens. Well, something notable just happened: exact rooting landed. What is exact rooting? In order to support generational and\/or compacting GC, you need to be able to move GC-allocated things such as objects around. This [&hellip;]<\/p>\n","protected":false},"author":139,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4555,4546],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.mozilla.org\/nnethercote\/wp-json\/wp\/v2\/posts\/2798"}],"collection":[{"href":"https:\/\/blog.mozilla.org\/nnethercote\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mozilla.org\/nnethercote\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/nnethercote\/wp-json\/wp\/v2\/users\/139"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/nnethercote\/wp-json\/wp\/v2\/comments?post=2798"}],"version-history":[{"count":0,"href":"https:\/\/blog.mozilla.org\/nnethercote\/wp-json\/wp\/v2\/posts\/2798\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.mozilla.org\/nnethercote\/wp-json\/wp\/v2\/media?parent=2798"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mozilla.org\/nnethercote\/wp-json\/wp\/v2\/categories?post=2798"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mozilla.org\/nnethercote\/wp-json\/wp\/v2\/tags?post=2798"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}