1. 15

They move control of GC into the Android runtime. This improved power efficiency and throughput. Interesting thing to me is that per-process GC’s tuned to workload were shown better than global ones at optimization in other work. Experimenting with a combination of those concepts might get even better results. Especially as average coder probably didn’t tune the local GC right (global wins) but another might give better configuration (local wins).


  2. 4

    This reminds me of macOS/iOS Grand Central Dispatch, where multiple processes can share system-wide thread pools rather than managing their own. Similar argument that having one global manager for workload improves overall system efficiency.

    1. 3

      I wonder about the security implications of a true global garbage collector. Who runs destructors, for example?

      1. 6

        If you have a truly global garbage collector, it doesn’t matter: The garbage collector is already mapping in every processes’s address space fully, touching the memory and doing whatever it pleases. It has to, if you want any kind of performance. Worrying about who runs destructors is pointless: you’ve already lost.

        At the same time, destructors (finalizers) in Java aren’t guaranteed to be run in the first place, and this code could theoretically just punt. Or it could signal to the initial process that an object is freed, and tell it to run the finalizer. There’s already a lot of communication.

        Still, I think you could actually tear out the key innovation in this paper and still get the advantages they mention. I suspect that the bulk of the benefits that you get from this come from having some sort of system wide feedback mechanism on when it’s a good time to perform collections. Specifically, out of the five parts required to implement this paper, I suspect this one is the one that brings significant benefits:

        A GC-aware governor that works in tandem with the server to improve power consumption and performance according to the current workload, taking special measures during GC activity

        The rest is just shuffling who is doing the work, without reducing the work that needs to be done. And because each process gets its own dedicated GC thread in the server, it doesn’t even reduce the number of processes doing work.