默认情况下,我在机器上启动的每个 Java 进程似乎都有两个垃圾收集器。我正在通过 JConsole 进行检查。
示例 - 对于我当前正在运行的 Eclipse。
PS MarkSweep
Collection Count - 221
Collection Time - 102118
Memory Pool Names - java.lang.String[4]
PS清除
Collection Count - 241
Collection Time - 2428
Memory Pool Names - java.lang.String[2]
我假设他们有重叠的池。当使用相同的池(Eden、survivor、old gen)时,两个垃圾收集器如何协同工作?池之间的对象移动是否没有重叠(例如调用第二种算法时从一个幸存者到另一个幸存者的移动)?即使不是,为什么每个池需要多个收集器?
我读过这篇关于 GC的文章。他们提到对不同的主要和次要 GC 使用不同的收集器,但似乎没有提到在同一个池上使用多个收集器。