Can't we get into problems with heap compaction though? It seems that modern GCs try to keep the heap tidy by moving objects around.
Then again we may not get into this problem until there's a full GC which would be quite rare.
If fork() performance is important to you, you probably don't want compaction for the tenured generation at all. That's totally fine; while fragmentation will accumulate over time, it's no worse than C++. You'll still have copying for the nursery, but the nursery fills up and gets recycled so often that the COW optimization isn't really helping you there anyhow.