Adi*_*tya 29 java garbage-collection
我在我的机器上启动的每个Java进程默认情况下都有两个垃圾收集器.我正在通过JConsole检查这个.
示例 - 对于我当前运行的Eclipse.
Collection Count - 221
Collection Time - 102118
Memory Pool Names - java.lang.String[4]
Run Code Online (Sandbox Code Playgroud)
Collection Count - 241
Collection Time - 2428
Memory Pool Names - java.lang.String[2]
Run Code Online (Sandbox Code Playgroud)
我假设他们有重叠的池.当使用相同的池(伊甸园,幸存者,老一代)时,两个垃圾收集器如何协同工作?池之间的对象移动是否没有重叠(例如,当调用第二个算法时,从一个幸存者到另一个幸存者的移动)?即使不是,为什么每个池需要多个收集器呢?
Dav*_*ebb 41
我假设他们有重叠的池.
这个假设是错误的.PS Scavenge将用于年轻(伊甸园,幸存者)一代,PS MarkSweep将用于老一代.唯一的"重叠"是PS Scavenge一旦他们已经有一段时间将对象移动到老一代,然后让PS MarkSweep处理它们.
为不同的池使用不同的垃圾收集器的好处是,对于旧的生成对象而言,适用于伊甸园池中的对象的算法不一定能够很好地工作.
对于没有空间将对象移动到旧一代时出现的"主要"集合,Sun的这篇(诚然陈旧的)白皮书说明如下:
...年轻代收集算法没有运行.而是在整个堆上使用旧一代收集算法.