是否将“静态决赛”直接分配到年轻一代或老一代或一代人? (我想它很可能会在我想的时候进入老一代。)如果它是在perm gen中分配的那么,当它在Perm Gen中进行类卸载时会被垃圾收集吗?
答案 0 :(得分:8)
是否将“静态决赛”直接分配给年轻一代或老一代或者是一代人?
static final
变量引用的对象将根据与任何其他对象相同的规则进行分配。它最有可能分配给年轻一代或老一代(如果它很大且某些其他条件适用)。
对象将由new
以某些任意代码执行来分配。 JVM无法知道该对象(最终)将被分配给static final
变量。
包含静态变量的帧的空间可能在permGen中分配。当然,这不是常规的Java对象。
如果它是在perm gen中分配的,那么当在Perm Gen中进行类卸载时它会被垃圾收集吗?
这取决于permGen是否被垃圾收集。在现代JVM中,我希望卸载的类静态引用的对象将在同一个GC循环中被垃圾收集,或者下一个...假设它们无法访问。
无论哪种方式,您都不应该将应用程序编码为依赖于这些细节。它们是特定于JVM的。
请注意,从Java 8开始,自permgen is no more以来,这个问题没有实际意义。