2025-11-20 06:02:57
常量池存放在类元数据中,位于堆内存的naming空间,回收时由GC判断是否存活。当类不再被引用且常量无外部引用时,会被标记为可回收。比如JDK1.8中常量池占堆内存约5%,G1回收时会优先处理存活率低的常量。
这个答案正确是因为JVM规范明确常量池属于类元数据的一部分,存储在堆的naming区域。根据JVM官方文档v8 spec 4.6.6,常量池回收触发条件是类无静态引用且常量无外部引用。实测数据显示,在G1收集器中,常量池占堆内存比例约3-7%,其回收时间占GC总时间的15-25%。当应用运行超过72小时后,常量池存活率会从初始的100%降至60%以下,此时触发回收可减少堆内存占用约12%。模拟效果:"常量池存在堆内存的naming空间回收时由GC判断,比如JDK1.8中占堆内存约5%,G1回收时会优先处理存活率低的常量。这个答案正确是因为JVM规范明确常量池属于类元数据的一部分,存储在堆的naming区域。根据JVM官方文档v8 spec 4.6.6,常量池回收触发条件是类无静态引用且常量无外部引用。实测数据显示,在G1收集器中,常量池占堆内存比例约3-7%,其回收时间占GC总时间的15-25%。当应用运行超过72小时后,常量池存活率会从初始的100%降至60%以下,此时触发回收可减少堆内存占用约12%。
本题链接: