PS MarkSweep是垃圾收集器

gpe*_*tao 13 java garbage-collection

我的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)
Run Code Online (Sandbox Code Playgroud)

这是我的测试代码:

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

    for (GarbageCollectorMXBean bean : beans) {
        System.out.println(bean.getName());
    }
Run Code Online (Sandbox Code Playgroud)

结果是:

PS Scavenge

PS MarkSweep
Run Code Online (Sandbox Code Playgroud)

我知道PS Scavenge是年轻一代垃圾收集器的"Parallel Scavenge","PS MarkSweep"是哪个,它是"Parallel Old"?

Mik*_*ike 21

为了其他人找到这个问题的好处,这里有一个很好的概述:

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

引用此问题的相关部分:

年轻一代收藏家

复制(启用-XX:+ UseSerialGC)
串行拷贝收集器,使用一个线程将幸存的对象从Eden复制到Survivor空间和Survivor空间之间,直到它确定它们已存在足够长的时间,此时它将它们复制到老一辈.

PS Scavenge(启用-XX:+ UseParallelGC)
并行清除收集器,如复制收集器,但并行使用多个线程,并且具有如何收集旧代的一些知识(基本上编写为使用串行和PS旧版本)收藏家).

ParNew(启用-XX:+ UseParNewGC)
并行副本收集器,如复制收集器,但并行使用多个线程并具有内部"回调",允许旧代收集器对其收集的对象进行操作(真正写入使用并发收集器).

G1 Young Generation(启用-XX:+ UseG1GC)
垃圾第一个收集器,使用"垃圾优先"算法将堆分成许多较小的空间,但这些仍然分为Eden和Survivor空间. G1.

老一代收藏家

MarkSweepCompact(使用-XX:+ UseSerialGC启用)
串行标记扫描收集器,它们的父亲,使用串行(一个线程)完全标记清除垃圾收集算法,可选择压缩.

PS MarkSweep(启用-XX:+ UseParallelOldGC)
并行扫描标记扫描收集器,MarkSweepCompact的并行版本(即使用多个线程).

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

G1 Mixed Generation(启用-XX:+ UseG1GC)
垃圾第一个收集器,使用'Garbage First'算法将堆分成许多较小的空间.