The amount of data copied to the GCs of different type differs a lot. Hence particularly old gen PLAB sizing is very badly affected by previous sizing during young only GCs.
E.g. since young only gcs typically do not copy a lot to old gen, the old gen PLAB size will be shrunk continuously.
In a well tuned system, the number of young only gcs is typically much higher than mixed gcs, so at the beginning of mixed gc the old gen PLAB is very small, affecting performance.
This is particularly of concern, because allocation in the old gen requires taking a lock, which may be contended a lot. (There is one of these locks per region, but since currently we allocate into another region only if the current one is full, this does not help a lot).
Conversely, after mixed gc the old gen PLAB is too large for the young only gc (which just wastes memory).
The young gen PLAB sizing may be similarly mismatched as the young gen during mixed gc is much smaller than usual, meaning that often more allocation happens (because the objects have less time to die).
Investigate this issue and propose fixes.