Generational and Compact gc have already been thought best practice. But golang doesn't adopt it. Who can tell me the reason?
I'm not a GC expert, but here are a few links that seem to explain the desig:
https://blog.golang.org/go15gc
https://www.youtube.com/watch?v=aiv1JOfMjm0
https://github.com/golang/proposal/blob/master/design/17503-eliminate-rescan.md
Here is the patient and enlightening reply from golang-nuts.
https://groups.google.com/forum/#!topic/golang-nuts/KJiyv2mV2pU