It does come with a huge penalty. Want to get rid of your GC pauses? Good luck with that. Best case scenario like D you get to split your libraries in GC and non-GC, or C# where you can kinda skirt around it with structs and stackalloc.
Worst case scenario Java without value types - Rewrite it in another language.
You can have completely pauseless GC. Take a look at SGCL for C++.