java - a "static final"直接分配到哪里? young gen or old gen 还是 perm gen?

标签 java memory-management garbage-collection heap-memory

“static final”是直接分配到young gen还是old gen还是perm gen? (我想它很可能会在我想的时间内落入老一代。)如果它在 perm gen 中分配,那么当在 Perm Gen 中发生类卸载时它会被垃圾收集吗?

最佳答案

Is a "static final" directly allocated into young gen or old gen or perm gen?

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

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

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

If it is allocated in the perm gen then, will it be garbage collected when class unloading takes place in Perm Gen?

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

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


请注意,从 Java 8 开始,这个问题没有实际意义,因为 permgen is no more .

关于java - a "static final"直接分配到哪里? young gen or old gen 还是 perm gen?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3800444/

相关文章:

java - Richfaces:不同窗口(或选项卡)中的相同树是否同步?

java - Hibernate 映射与动态查询

java - 推荐的字体)用于显示 unicode 字符?

java - 是否可以将 'see' 对象图用于垃圾回收?

c - 将从 readdir() 返回的字符串放入 char **

c++ - 与内存相关的“竞技场”一词的含义是什么?

ruby-on-rails - Ruby 中的内存管理

java - 如何断言断言 A 或断言 B 通过 Junit 4?

javascript - 该对象是否被垃圾回收?

c# - 我可以在 Unity3D 中的主线程以外的其他线程上运行 gc collect 吗?