“静态最终”直接分配到哪里?年轻的gen或老一代或perm gen?

时间:2010-09-27 00:32:28

标签: java memory-management garbage-collection heap

是否将“静态决赛”直接分配到年轻一代或老一代或一代人? (我想它很可能会在我想的时候进入老一代。)如果它是在perm gen中分配的那么,当它在Perm Gen中进行类卸载时会被垃圾收集吗?

1 个答案:

答案 0 :(得分:8)

  

是否将“静态决赛”直接分配给年轻一代或老一代或者是一代人?

static final变量引用的对象将根据与任何其他对象相同的规则进行分配。它最有可能分配给年轻一代或老一代(如果它很大且某些其他条件适用)。

对象将由new以某些任意代码执行来分配。 JVM无法知道该对象(最终)将被分配给static final变量。

包含静态变量的帧的空间可能在permGen中分配。当然,这不是常规的Java对象。

  

如果它是在perm gen中分配的,那么当在Perm Gen中进行类卸载时它会被垃圾收集吗?

这取决于permGen是否被垃圾收集。在现代JVM中,我希望卸载的类静态引用的对象将在同一个GC循环中被垃圾收集,或者下一个...假设它们无法访问。

无论哪种方式,您都不应该将应用程序编码为依赖于这些细节。它们是特定于JVM的。


请注意,从Java 8开始,自permgen is no more以来,这个问题没有实际意义。