I think that for a conventional GC it's mostly dependent on how much time you have and what properties you want, that's mostly an engineering problem. Remember that academia worked on GCs way before mainstream languages. From what I understand the "experimental" languages are playing with region-based allocation for now.