繁体   English   中英

JVM垃圾收集

[英]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()将被调用一次,只调用一次。

还要查看调优垃圾收集器 ,关于这个问题:

http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html#1.1.%20Types%20of%20Collectors%7Coutline

Oracle的Garbage-First GC算法(Java 8中提供,Java 9中的默认选项)是并行/并发GC算法,因此涉及多个线程。 具体来说,有许多线程用于垃圾收集:

  • ParallelGC Threads是在“停止世界”收集阶段使用的线程
  • 并行标记线程(或并发GC线程)是用于将区域标记为清理和运行的候选者而不停止应用程序线程的线程
  • G1并发细化线程负责标记对各个区域的记忆参考集的更改

可以通过设置-XX:+UseG1GC来启用-XX:+UseG1GC (请注意,虽然在Java 7 G1GC中可用,但此时不可靠,所以不要在生产中使用它(因为Java 7已经结束了,你不应该'在生产中使用它))。

来源https://blogs.oracle.com/g1gc/entry/g1gc_faqhttp://www.oracle.com/technetwork/articles/java/g1gc-1984535.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM