PS MarkSweep是哪种垃圾回收器?

18

我的jdk版本是:

java version "1.8.0_102"

Java(TM) SE Runtime Environment (build 1.8.0_102-b14)

Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)

这是我的测试代码:

List<GarbageCollectorMXBean> beans = ManagementFactory.getGarbageCollectorMXBeans();

    for (GarbageCollectorMXBean bean : beans) {
        System.out.println(bean.getName());
    }

结果是:

PS Scavenge

PS MarkSweep

我知道PS Scavenge是年轻代垃圾收集器的“Parallel Scavenge”,“PS MarkSweep”是什么,是“Parallel Old”吗?


可能是获取正在运行的JVM的GC设置的重复问题。 - the8472
可能是与获取运行JVM的GC设置重复了。 - dcernahoschi
1
这不是重复问题,请仔细阅读。 - stinger
1个回答

42

为了让其他人受益,这里有一篇很好的概述文章:

http://www.fasterj.com/articles/oraclecollectors1.shtml

以下是引用本问题相关部分:

年轻代回收器

Copy(使用-XX:+UseSerialGC启用)
串行拷贝回收器使用一个线程将生存对象从Eden复制到Survivor区, 并在Survivor区之间复制,直到决定这些对象存在足够长的时间后, 将它们复制到老年代。

PS Scavenge(使用-XX:+UseParallelGC启用)
并行清理回收器就像拷贝回收器一样,但使用多个线程并行工作,并且具有一些关于如何 回收老年代的知识(基本上编写以与串行和PS老年代回收器一起使用)。

ParNew(使用-XX:+UseParNewGC启用)
并行拷贝回收器就像拷贝回收器一样,但使用多个线程并行工作,并且具有内部“回调”, 允许老年代收集器在其收集的对象上操作(实际上编写以与并发收集器一起使用)。

G1 Young Generation(使用-XX:+UseG1GC启用)
垃圾优先回收器使用“垃圾优先”算法,将堆分为许多较小的空间, 但这些空间仍然在G1的年轻代中分为Eden和Survivor空间。

老年代回收器

MarkSweepCompact(使用-XX:+UseSerialGC启用)
串行标记-清除回收器是其中之父,使用串行(一个线程)完整 标记-清除垃圾回收算法,并可选压缩。

PS MarkSweep(使用-XX:+UseParallelOldGC启用)
并行清除标记整理收集器的并行化版本(即使用多个线程),是MarkSweepCompact的升级版。

ConcurrentMarkSweep(使用-XX:+UseConcMarkSweepGC启用)
并发收集器,一种垃圾回收算法,试图在后台执行大部分垃圾回收工作,而不会停止应用程序线程,虽然仍有一些阶段需要停止应用程序线程,但这些阶段被尝试保持到最小。请注意,如果并发收集器无法跟上垃圾回收速度,它将转为下一次GC(仅限于)串行MarkSweepCompact收集器。

G1混合代(使用-XX:+UseG1GC启用)
垃圾优先收集器,使用“垃圾优先”算法将堆分成许多较小的空间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接