I would say it depends, its quite easy to unknowingly depend on non-standard behavior that can break like HashMap iteration order.

What often causes issues is that every release has a new byte code version and the ecosystem relies heavily on byte code libraries so these will have to be updated across the board (eg. you use middleware that uses a framework that uses a byte code library).

Things on the top of my head that can break with Java 9:

- new gc logging options and format

- rt.jar and tools.jar are gone

- new JDK layout

- Corba, XML and Annotation classes no longer visible by default

- application class loader is no longer and URL class loader

- a different hack is required to munmap files

It's not too bad in general.