一个被static final变量引用的对象将按照与任何其他对象相同的规则进行分配。它最有可能分配在年轻代,或者在老年代(如果它很大并且满足某些其他条件)。该对象将由执行某些任意代码的new分配。 JVM无法知道该对象(最终)将被分配给static final变量。包含静态变量的框架空间可能分配在permGen中。当然,这不是常规的Java对象。这取决于permGen是否进行垃圾回收。在现代JVM中,它会进行垃圾回收,并且我期望在相同的GC周期或下一个周期中垃圾回收卸载类的静态引用的对象,假设它们是不可达的。无论哪种方式,您都不应编写依赖于这些细节的应用程序。它们是JVM特定的。 请注意,自Java 8起,这个问题已经不再重要,因为永久代 已经不存在。
Class.forName()
加载的类都有可能变得无法访问,并且根据JVM选项,可能会被卸载/垃圾回收。 - Stephen C