Назовите отличия между 8 и 10, пожалуйста.
Очень сильные отличия во внутренней работе JVM: добавлен AOT, улучшен JIT (SSE, SIMD и так далее), улучшена векторизация, добавлен Parallel G1 (аналог обычного Parallel GC, но с использованием регионов памяти, как в G1), добавлен (в качестве бета-версии) Graal GC (аналог CMS, но количество пауз меньше; распределение памяти по регионам, как в G1 [если не вдаваться в техническую реализацию; если интересно, то могу рассказать подробнее]), stack space reserving (резервирование места на стеке под полное выполнение метода [для избежания случаев со stack overflow во время выполнения методов типа lock/unlock], реализовано в качестве системной аннотации).
Из более визуальных изменений, которые заметны пограмистам (сахарок): var types (добавлено новое ключевое слово var, как в C#), complex types (комплексные типы в шаблонах, а-ля Цейлон/Котлин, например: <T extends Pew & Ololo>), разделение RT на модули, добавление в конкаренси пакет обсерверов (а-ля реактив из коробки). Ну и всякая мелочь, которую упоминать не имеет особого смысла.
Девятка уже успела отлежаться, первичные баги в ней исправили, поддержка в IDE успела закрепиться, звенящий тяжелыми цепями ынтырпрайз успел уже ввести поддержку новых версий в своих серверах контейнеров. Можно вполне безболезненно переходить на десятку/девятку с восьмерки. Кстати, десятка получила порт всех изменений с девятки (ваш капитан очевидность). В ближайшее время планирую сам переезжать, причем исключительно ради AOT, JIT и Graal