Um Módulo é uma coleção auto-descritiva de Código, Dados e Recursos. Um módulo é um conjunto de Pacotes, Tipos (classes, classes abstratas, interfaces, etc.) com Código e Dados e Recursos.
As aplicações escritas em Java 8 ou anteriores não conhecem suas próprias dependências.
Claro que o javac não compilará nosso código se faltarem dependências de tempo de compilação e, claro, temos ferramentas de compilação e IDEs para nos apoiar com esses casos. Contudo, no tempo de execução, a JVM precisa pesquisar classes necessárias no CLASSPTH novamente, em alguns casos, resultando em diferentes classes sendo carregadas pelo classloader. Assim podemos ter problemas em tempo de execução.
A estrutura modular vem para resolver este problema.
Além disto o sistema JDK atual é muito grande. No Java 9, o próprio JDK foi dividido em pequenos módulos. Portanto, é muito fácil reduzir o aplicativo Java para dispositivos pequenos.
O JDK 9 não contém JRE. No JDK 9, o JRE é separado em uma pasta de distribuição separada. O software JDK 9 contém uma nova pasta "jmods", que contém um conjunto de módulos Java 9 como mostrado abaixo.
No Youtube estão 3 vídeos que trazem uma introdução a este tema.