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...