If static IHOP is selected, it may happen that concurrent marking will never be started.
The reason is that static IHOP starts if old gen occupancy exceeds a fixed percentage of the current heap capacity. If either the user or ergonomics decide that the old gen can not be larger than that fraction of the heap capacity that triggers concurrent mark, marking will never start.
E.g. current defaults allow a young gen size up to 60% of the heap capacity (G1MaxNewSizePercent). which means that only 40% can be occupied by old gen.
However, the default value of 45 for InitiatingHeapOccupancyPercent means that marking will only trigger if the old gen occupies more than 45% of the heap, which will not occur.
This means G1 will run into full gcs (potentially) all the time.
This situation particularly occurs in high-throughput applications like SPECjbb* with default settings.
The best option would be to make the IHOP threshold not compared to current capacity, but capacity - minimum young gen size.