Java主要和次要垃圾收集
我一直在阅读Java中的垃圾收集和问答,但我对垃圾收集的类型感到困惑 让我们以吞吐量收集器为例。(也称为并行收集器)。文档说它使用多个线程来执行次要收集,而主要收集使用单线程(与串行收集器相同) 现在我的问题是:Java主要和次要垃圾收集,java,garbage-collection,Java,Garbage Collection,我一直在阅读Java中的垃圾收集和问答,但我对垃圾收集的类型感到困惑 让我们以吞吐量收集器为例。(也称为并行收集器)。文档说它使用多个线程来执行次要收集,而主要收集使用单线程(与串行收集器相同) 现在我的问题是: 完整的GC意味着什么:a)它意味着次要和主要的收集都完成了吗?或b)完整GC==主要集合?是哪一个 如果a),是否意味着次要收集仍然使用多个线程完成,而主要收集使用单个线程完成 如果是b),这是否意味着年轻人和老年人都使用单线程清除 而且, 4.完全GC是否也只影响老一代或年轻一代 提
java-verbose:gc-XX:+PrintGCDetails-XX:+PrintGCTimeStamp
]。学究式的定义是,完整GC首先运行Minor,然后运行Major(尽管如果较老的一代已满,则可以切换顺序,在这种情况下,首先释放它以允许它接收来自年轻一代的对象)
好的,回到正题。JVM将[旧一代(或Perm)中的]主要集合视为完整GC。下面是我能够快速编写的一个程序的输出,以说明这一点。第一行是次要GC,第二行是主要(完整)GC。你可以看到,它只发生在老一代(CMS)中,并且能够将旧一代从1082K减少到1034K
11.431:[GC 11.431:[ParNew:1152K->128K(1152K),0.0009893秒]2111K->1210K(6464K),0.0010182秒][次:user=0.00 sys=0.00,real=0.00秒]
17.882:[Full-GC(System)17.882:[CMS:1082K->1034K(5312K),0.0212614秒]2034K->1034K(6464K),[CMS-Perm:9426K->9410K(21248K)],0.021320秒][次:用户=0.02系统=0.00,实数=0.02秒]
-XX:+UseSerialGC
-XX:+UseParallelGC
-XX:+UseParNewGC
-XX:+UseParallelOldGC
-XX:+UseConMarkSweepGC
CMS和G1都区分了新一代(次要)集合、旧一代的并发集合和完整gcs。后者是万不得已的事情,大部分GCing应由新一代和并行集合处理。+1。谢谢你问我的问题HotSpot 6(不是第一个版本)和HotSpot 7中也有
-XX:+UseG1GC
,这两个版本管理年轻人和老年人。我需要澄清一下,major GC也会收集pern gen?还是完全GC?