183. Briefly introducing hidden classes
Hidden classes were introduced in JDK 15 under JEP 371. Their main goal is to be used by frameworks as dynamically generated classes. They are runtime-generated classes with a short lifespan that are used by frameworks via reflection.
Important note
Hidden classes cannot be used directly by bytecode or other classes. They are not created via a class loader. Basically, a hidden class has the class loader of the lookup class.
Among other characteristics of hidden classes, we should consider that:
- They are not discoverable by the JVM internal linkage of bytecode or by the explicit usage of class loaders (they are invisible to methods such as
Class.forName(),Lookup.findClass(), orClassLoader.findLoadedClass()). They don’t appear in stack traces. - They extend Access Control Nest (ACN) with classes that cannot be discovered.
- Frameworks can define hidden classes, as many as needed, since they...