Oracle has announced its intentions to include JEP 248 into its list of targeted Java 9 JEPs. This would make Garbage First (G1) – a fully fledged garbage collector as of JDK 8u40 – the default garbage collector on 32- and 64-bit server configurations. Assuming G1 gets the final nod, it will push out throughput-oriented garbage collectors like Parallel GC as the de-facto choice for server configurations.
According to the official JEP, the motivation for implementing GC1 as default in JDK 9 is grounded in the basis that limiting GC pauses should take precedence over maximising throughput. The rationale is that this will provide an elevated user experience and minimise Stop-The-World pauses. However, as Abraham Marín Pérez writes, this comes at a “higher computational cost.”
Since G1 first went live in Java 8, there has been a good deal of work to upgrade this GC, including concurrent class unloading (JEP 156) in Java 8u40. There are further additions planned before Java 9 launches in September 2016.
Whilst the G1 was welcomed to the platform when it made its debut, there’s some uncertainty in the community as to its suitability over the Concurrent Mark Sweep (CMS) collector. As noted in the JEP, the assumption that limiting latency needs to be the priority is very much a hypothetical suggestion. If the team turn out to be off the mark, then it will be back to the drawing board.
Another possible factor that could impede G1’s path to Java 9 will be any undiscovered bugs that might come to light once the feature takes centre stage. If anything really critical come to light, Oracle will revert back to Parallel GC as default until the problem can be solved.