(I don't quite understand why there's no extra cost for the second access, but I'll think about it and figure it out.)
How do these costs compare then? Are we really at a point where mutation is superior to short-term allocation as far as the GC is concerned? Do you have measurements or is this something you can calculate out? -- Matthias On Aug 24, 2010, at 11:43 AM, Kevin Tew wrote: > After a garbage collection all non-nursery memory is write-protected. > The first write to a page (16kB) , after a garbage collection, incurs the > cost of unprotecting the page so it is writable and recording that the page > has been written on. > All subsequent mutations to objects in a unprotected page do not have a write > barrier cost, until the next garbage collection run. > > At then next garbage collection all unprotected pages are re-write-protected > and subsequent first page access will have a write barrier cost. > > Kevin > > On 08/24/2010 09:04 AM, Matthias Felleisen wrote: >> And what if they don't live in the nursery? >> >> >> On Aug 24, 2010, at 10:51 AM, Kevin Tew wrote: >> >> >>> Write barriers in racket3m are implemented using memory protection >>> primitives provided by the OS. >>> Between collections we only incur a write barrier cost the first time a >>> page (16k in racket) is written to. >>> After the first access per page, additional mutations on that page have no >>> extra cost, until the gc collects again. >>> Mutating objects living in the nursery has no gc overhead. >>> >>> Kevin >>> >>> On 08/24/2010 08:18 AM, Matthias Felleisen wrote: >>> >>>> Yes, I was taught the same thing in 1984. That's not the issue. >>>> >>>> >>>> >>>> On Aug 24, 2010, at 10:17 AM, Robby Findler wrote: >>>> >>>> >>>> >>>>> My experience is that allocation is the primary thing to look for to >>>>> improve performance. >>>>> >>>>> Robby >>>>> >>>>> On Tuesday, August 24, 2010, Matthias Felleisen<matth...@ccs.neu.edu> >>>>> wrote: >>>>> >>>>> >>>>>> Catching up with some mail. >>>>>> >>>>>> Neil wrote: >>>>>> >>>>>> >>>>>> >>>>>>> Avoiding allocation reduces GC collects, which reduces stutters and >>>>>>> hitches. >>>>>>> >>>>>>> >>>>>> My (possibly old) understanding of GC and mutation tell me that this is >>>>>> one of those prejudices that programmers should get rid of. Every >>>>>> mutation goes across an access barrier in a GC like ours and can thus be >>>>>> much more expensive than a lightweight allocation. This was certainly >>>>>> true for early generational collectors. I do know that the hordes of >>>>>> Java programmers who invaded GCLand forced GC builders to make >>>>>> C/C++-like programs in Java work reasonably fast with collectors and so >>>>>> collectors changed. >>>>>> >>>>>> Matthew, do you know what it's really like for us? >>>>>> _________________________________________________ >>>>>> For list-related administrative tasks: >>>>>> http://lists.racket-lang.org/listinfo/dev >>>>>> >>>>>> >>>>>> >>>> _________________________________________________ >>>> For list-related administrative tasks: >>>> http://lists.racket-lang.org/listinfo/dev >>>> >>>> >>> _________________________________________________ >>> For list-related administrative tasks: >>> http://lists.racket-lang.org/listinfo/dev >>> > _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/dev