By now, I'd say if you depend on a library that still doesn't work on JDK9+ you should replace it, but depending on your requirements that may not be so easy and so some people are still stuck on JDK8.
I have tests that use JSON serialization and deserialization (and then some), and they pass perfectly fine on Java 8 runtime, but fail in exactly same place on Java 11, without recompilation. I have spent some non-zero time trying to get to the bottom, but so far without much luck.
For example, in addition to the module system, Java 9 changed the implementation of some of its XML rendering libraries and caused meaningful behavior changes.
https://github.com/CodeFX-org/java-9-wtf has a list of some of the stuff that broke.
That said, 8 -> 9 was the only really painful transition in my experience. Since then the upgrades have been smoother.
And in the particular case of Java 9, they decided to deprecate several things, and quickly removed them in Java 11 (that is: with less than a year warning, and no warning if you follow only the long-term versions). That includes a lot of J2EE classes which previously came with the JRE, and now became external dependencies (with the most recent version of these external dependencies sometimes having slightly different behavior).
The Hadoop ecosystem has definitely been dragging its feet on JDK bumps.
[0] https://github.com/apache/spark/blob/master/resource-manager...
In theory yes.
In practice the plugin and scanning systems the software I use has had a multitude of failures between JDK8 and 11.
That might not sound too important but it has an effect on GC chosen amd obviously how you might have tuned your thread pools.