Use _old_generation_expanded_on_last_scavenge when the ParallelGC decides to do a full GC after a young collection. This is normally done because the amount of free space in the old gen is judged not to be sufficient for another young collection. If a full collection is done at this time, the young gen is empty (usually) so is a good time to do a full collection.
Use _old_generation_too_full_to_scavenge when a young collection has been initiated but ParallelGC does not think there is enough space in the old generation for the expected promotions. Doing the full GC instead of trying (and failing) to do a young collection saves the cost of promotion failure handling.
Use _old_generation_too_full_to_scavenge when a young collection has been initiated but ParallelGC does not think there is enough space in the old generation for the expected promotions. Doing the full GC instead of trying (and failing) to do a young collection saves the cost of promotion failure handling.