Tag: garbage collection

实习字符串,字符串池和perm空间上的垃圾收集

在探索了java的字符串内部结构后,我对所谓的“烫发空间”感到困惑。 我最初的理解是它持有String 文字以及类元数据,如本问题所述 。 我还阅读了String.intern()方法,并将String放入String Pool中,返回对它的唯一实例的引用。 我的理解是,这是与JVM的perm空间中存在的字符串文字相同的字符串池。 对我来说,“烫发空间”可以修改是不可能的(毕竟它是永久性的,是吗?)。 但后来我发现这个问题 ,EJP对接受的答案的最高投票评论解释了这一点 现在,实习生的字符串已经可以使用GC了。 暗示GC在perm空间上运行,这似乎不是永久性的。 这如何调和? GC是否检查了烫发空间中的所有内容? GC是否检查字符串池中的所有内容,包括源中的字符串文字? 内联字符串是否有第二个字符串池? GC是否只知道在收集时查看实习生的字符串? 或者这个评论是错误的,并且实际上是一个字符串阻止它被GC’d(我希望不是这样)?

分析gc日志

我正在使用-XX:+PrintGCApplicationStoppedTime和-XX:+PrintGCApplicationConcurrentTime选项来打开gc日志记录。 但是发现只有在4 0r 5 PrintGCApplicationStoppedTime打印后PrintGCApplicationStoppedTime通过-XX:+PrintGCDetails命令打印gc日志的实际细节! 根据定义, PrintGCApplicationStoppedTime为每个gc打印应用程序停止时间。 但我不清楚为什么它打印如下所示的例子。 是因为 PrintGCApplicationStoppedTime只需在每个安全点到达后打印 (要么) 日志文件将由不同的gc线程记录。 我使用Concurrent扫描完整的GC和年轻一代的ParNew 我的应用是web应用程序。 O / p模式 – 我是这样的: Application time: 0.3847031 seconds Total time for which application threads were stopped: 0.3135419 seconds Application time: 0.1520723 seconds Total time for which application threads were stopped: 0.1993920 seconds Application time: 0.1188219 seconds Total time for which […]