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

Ash*_*ish 3 java heap garbage-collection memory-management

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

Ste*_*n C 8

是一个"静态决赛"直接分配到年轻一代或老一代或perm gen?

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

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

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

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

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

无论哪种方式,您都不应该编写应用程序以依赖于任何这些细节.它们是特定于JVM的.

  • +1"无论哪种方式,您都不应该编写应用程序以依赖于任何这些细节.它们是特定于JVM的." 静态最终,意味着它是静态的和最终的.似乎很危险,假设更多...... (3认同)