[英]JVM Garbage collection
一般情况下(因为我知道有一个来自Oracle / sun和其他第三方的标准JVM实现以及MS),JVM是否只创建一个作为守护进程运行的垃圾收集线程来收集垃圾对象或者JVM是否产生了多个一个线程来完成垃圾收集?
使用-XX:+UseParallelGC
启用的“吞吐量收集器”是默认收集器使用多个线程。 使用-XX:+UseConcMarkSweepGC
启用的“并发低暂停收集器”使用一个线程用于并发收集器,但其stop-the-world集合是并行的。
只有很少使用的单线程gc -XX:+UseSerialGC
是单线程的。
http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html
http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
-XX:ConcGCThreads = n - 并发垃圾收集器将使用的线程数。 默认值因运行JVM的平台而异。
http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#G1Options
可能有更多垃圾收集器线程,但您不应该依赖它们的数量,运行顺序或任何东西。 然而,有必要的东西,你可以依靠。 例如: Object.finalize()将被调用一次,只调用一次。
还要查看调优垃圾收集器 ,关于这个问题:
Oracle的Garbage-First GC算法(Java 8中提供,Java 9中的默认选项)是并行/并发GC算法,因此涉及多个线程。 具体来说,有许多线程用于垃圾收集:
可以通过设置-XX:+UseG1GC
来启用-XX:+UseG1GC
(请注意,虽然在Java 7 G1GC中可用,但此时不可靠,所以不要在生产中使用它(因为Java 7已经结束了,你不应该'在生产中使用它))。
来源https://blogs.oracle.com/g1gc/entry/g1gc_faq和http://www.oracle.com/technetwork/articles/java/g1gc-1984535.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.