Non-generational GCs don't have this problem, and it's one of the reasons why Shenandoah suited us well there.
< tenures all those requests to OldGC
> tenures all those requests to OldGen
Keep your caches out of GC memory for extra goodness.
Could you expand on this please?
Caches that are in scalar data forms (e.g. byte arrays) or off-heap aren't too bad - bytes and off-heap memory doesn't need to be traced. If you're caching an object graph dense with pointers, then not so great.
Could you please clarify this question? Do you mean that if cached objects are a small part of the total allocation rate, then generation GCs work well with that?
My answer meant that Shenandoah would work well in a program where cache occupies like 70-80% of the heap, and generational GCs might not. But surely, neither are going to break from a 1%-heap cache.