我在我的电脑上启动的每个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)时,两个垃圾收集器如何协同工作?是否没有对象在池之间移动(例如在调用第二个算法时从一个survivor到另一个survivor的移动)?即使不是这样,为什么我们需要每个池多个收集器?
我已阅读此GC文章。他们提到针对不同的major和minor GC使用不同的收集器,但似乎没有提到在同一池中使用多个收集器。