Wouldn't a non-copying generational collector with bump allocation be a recipe for fragmentation?
For implementing the generational GC they simply use sticky mark-bits.
SpiderMonkey used to use an allocator much like that of JSC before it switched to copying generational GC, to significant performance improvements.