美文网首页
7中垃圾回收器之间的组合关系

7中垃圾回收器之间的组合关系

作者: 秦汉邮侠 | 来源:发表于2018-02-08 13:58 被阅读31次

7中垃圾回收器

  • 3b3c42d2.jpg

关系1

  • 参数:-XX:+UseSerialGC
  • image.png

关系2

  • 参数:-XX: +UseParNewGC
  • image.png

关系3

  • 参数:-XX:+UseParallelGC
  • image.png

关系4

  • 参数:-XX:+UseConcMarkSweepGC
  • image.png
  • 老年代:并发标记失败,才是使用Serial Old

关系5

  • 参数:-XX:+UseParallelOldGC
  • image.png

关系6

  • 参数:-XX:+Use1G
  • image.png

关系7

  • 参数:是不存在的
  • image.png
  • cms 和serial 是不能一起使用的

敲黑板

Each blue box represents a collector that is used to collect a generation. The 
young generation is collected by the blue boxes in the yellow region and
the tenured generation is collected by the blue boxes in the gray region.

*   "Serial" is a stop-the-world, copying collector which uses a single GC thread.*   "ParNew" is a stop-the-world, copying collector which uses multiple GC threads. It differs
    from "Parallel Scavenge" in that it has enhancements that make it usable 
    with CMS. For example, "ParNew" does the
    synchronization needed so that it can run during the 
     concurrent phases of CMS.*   "Parallel Scavenge" is a stop-the-world, copying collector 
    which uses multiple GC threads.*   "Serial Old" is a stop-the-world,
    mark-sweep-compact collector that uses a single GC thread.*   "CMS" is a mostly concurrent, low-pause collector.*   "Parallel Old" is a compacting collector that uses multiple GC threads.
     <nl style="margin: 0px; padding: 0px; list-style: none; -webkit-font-smoothing: antialiased;">Using the -XX flags for our collectors for jdk6,</nl> *   UseSerialGC is "Serial" + "Serial Old"*   UseParNewGC is "ParNew" + "Serial Old"*   UseConcMarkSweepGC is "ParNew" + "CMS" + "Serial Old". "CMS" is used most of the time to collect the tenured generation. "Serial Old" is used when a concurrent mode failure occurs.*   UseParallelGC is "Parallel Scavenge" + "Serial Old"*   UseParallelOldGC is "Parallel Scavenge" + "Parallel Old"
     <nl style="margin: 0px; padding: 0px; list-style: none; -webkit-font-smoothing: antialiased;">FAQ

    1) UseParNew and UseParallelGC both collect the young generation using
    multiple GC threads. Which is faster?

    There's no one correct answer for
    this questions. Mostly they perform equally well, but I've seen one
    do better than the other in different situations. If you want to use
    GC ergonomics, it is only supported by UseParallelGC (and UseParallelOldGC)
    so that's what you'll have to use.

    2) Why doesn't "ParNew" and "Parallel Old" work together?

    "ParNew" is written in
    a style where each generation being collected offers certain interfaces for its
    collection. For example, "ParNew" (and "Serial") implements
    space_iterate() which will apply an operation to every object
    in the young generation. When collecting the tenured generation with
    either "CMS" or "Serial Old", the GC can use space_iterate() to 
    do some work on the objects in the young generation. 
    This makes the mix-and-match of collectors work but adds some burden
    to the maintenance of the collectors and to the addition of new
    collectors. And the burden seems to be quadratic in the number
    of collectors.
    Alternatively, "Parallel Scavenge"
    (at least with its initial implementation before "Parallel Old")
    always knew how the tenured generation was being collected and
    could call directly into the code in the "Serial Old" collector.
    "Parallel Old" is not written in the "ParNew" style so matching it with
    "ParNew" doesn't just happen without significant work.
    By the way, we would like to match "Parallel Scavenge" only with
    "Parallel Old" eventually and clean up any of the ad hoc code needed
    for "Parallel Scavenge" to work with both.

    Please don't think too much about the examples I used above. They
    are admittedly contrived and not worth your time.

    3) How do I use "CMS" with "Serial"?

    -XX:+UseConcMarkSweepGC -XX:-UseParNewGC.
    Don't use -XX:+UseConcMarkSweepGC and -XX:+UseSerialGC. Although that's seems like 
    a logical combination, it will result in a message saying something about 
    conflicting collector combinations and the JVM won't start. Sorry about that.
    Our bad.

    4) Is the blue box with the "?" a typo?

    That box represents the new garbage collector that we're currently developing called
    Garbage First or G1 for short. G1 will provide</nl> *   More predictable GC pauses*   Better GC ergonomics*   Low pauses without fragmentation*   Parallelism and concurrency in collections*   Better heap utilization
     <nl style="margin: 0px; padding: 0px; list-style: none; -webkit-font-smoothing: antialiased;">G1 straddles the young generation - tenured generation boundary because it is
    a generational collector only in the logical sense. G1 divides the
    heap into regions and during a GC can collect a subset of the regions.
    It is logically generational because it dynamically selects a set of
    regions to act as a young generation which will then be collected at
    the next GC (as the young generation would be).

    The user can specify a goal for the pauses and G1 
    will do an estimate (based on past collections) of how many 
    regions can be collected in that time (the pause goal). 
    That set of regions is called a collection set and G1 will
    collect it during the next GC.

    G1 can choose the regions with the most garbage to collect first (Garbage First, get it?)
    so gets the biggest bang for the collection buck.

    G1 compacts so fragmentation is much less a problem. Why is it a problem at all?
    There can be internal fragmentation due to partially filled regions.

    The heap is not statically divided into 
    a young generation and a tenured generation so the problem of
    an imbalance in their sizes is not there.

    Along with a pause time goal the user can specify a goal on the fraction of
    time that can be spent on GC during some period (e.g., during the next 100 seconds
    don't spend more than 10 seconds collecting). For such goals (10 seconds of
    GC in a 100 second period) G1 can choose a collection set that it expects it can collect in 10 seconds and schedules the collection 90 seconds (or more) from the previous collection. You can see how an evil user could specify 0 collection
    time in the next century so again, this is just a goal, 
    not a promise.

    If G1 works out as we expect, it will become our low-pause collector in place of 
    "ParNew" + "CMS". And if you're about to ask when will it be ready, please don't
    be offended by my dead silence. It's the highest priority project for our team,
    but it is software development so there are the usual unknowns. It will be out
    by JDK7\. The sooner the better as far as we're concerned.

    **Updated February 4. **Yes, I can edit an already posted blog. Here's
    a reference to the G1 paper if you have ACM portal access.

    [http://portal.acm.org/citation.cfm?id=1029879](http://portal.acm.org/citation.cfm?id=1029879)</nl> 

#### Join the discussion

[](https://blogs.oracle.com/jonthecollector/our-collectors#open)

*   [](http://java.sun.com/j2se/reference/whitepapers/memorymanagement_whitepaper.pdf)

*   [](http://www.michael-bien.com/roller/mbien/entry/garbage_first_the_new_concurrent)

*   [](http://research.sun.com/jtech/pubs/)

*   [](http://www.gossamer-threads.com/lists/lucene/java-user/44286#44286)

    [](http://www-cs.canisius.edu/~hertzm/bc.html)

*   [](http://www-cs.canisius.edu/~hertzm/gcmalloc-oopsla-2005.pdf)

    [](http://www-cs.canisius.edu/~hertzm/)

<form class="comment-form" method="post" action="https://blogs.oracle.com/jonthecollector/post.comment" style="margin: 30px 133.797px; padding: 0px; list-style: none; -webkit-font-smoothing: antialiased;"><label id="comment-form-name-label" style="margin: 0px; padding: 35px 0px 8px; list-style: none; -webkit-font-smoothing: antialiased; display: block; width: 484px;"></label><input type="text" id="comment-form-name" name="commentAuthorName" value="" size="80" style="margin: 0px; padding: 0px; list-style: none; -webkit-font-smoothing: antialiased; border: 1px solid rgb(193, 193, 193); border-radius: 2px; width: 475.797px; height: 1.5em; font-size: 2rem;"><label id="comment-form-email-label" style="margin: 0px; padding: 35px 0px 8px; list-style: none; -webkit-font-smoothing: antialiased; display: block; width: 484px;"></label><input type="text" id="compendiumment-form-email" name="commentAuthorEmail" value="" size="80" style="margin: 0px; padding: 0px; list-style: none; -webkit-font-smoothing: antialiased; border: 1px solid rgb(193, 193, 193); border-radius: 2px; width: 475.797px; height: 1.5em; font-size: 2rem;"><label id="comment-form-comment-label" style="margin: 0px; padding: 35px 0px 8px; list-style: none; -webkit-font-smoothing: antialiased; display: block; width: 484px;"></label><textarea class="field" id="fieldcomment-form-comment" name="commentText" rows="8" cols="60" style="margin: 0px; padding: 0px; list-style: none; -webkit-font-smoothing: antialiased; width: 475.797px; height: 8em; font-size: 2rem;"></textarea><label for="spam-prevent" id="spamPrevent-label" style="margin: 0px; padding: 35px 0px 8px; list-style: none; -webkit-font-smoothing: antialiased; display: block; width: 484px;"></label><input type="text" size="80" class="spam-prevent" name="spamPrevent" style="margin: 0px; padding: 0px; list-style: none; -webkit-font-smoothing: antialiased; border: 1px solid rgb(193, 193, 193); border-radius: 2px; width: 475.797px; height: 1.5em; font-size: 2rem;">[图片上传失败...(image-2bdb5-1518069459511)]

<input type="submit" id="submitcomment-form-submit" name="submitComment" value="Submit" style="margin: 0px; padding: 10px 65px 10px 35px; list-style: none; -webkit-font-smoothing: antialiased; border-width: 1px; border-style: solid; border-color: rgb(245, 245, 245) rgb(245, 245, 245) rgb(212, 212, 212); border-image: initial; border-radius: 0px; width: auto; height: auto; font-size: 1.6rem; color: rgb(31, 79, 130); text-align: center; display: block; background: linear-gradient(rgb(255, 255, 255) 0%, rgb(255, 255, 255) 56%); box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 2px; cursor: pointer;">

</form>

相关文章

  • CMS垃圾回收器详解

    垃圾回收器组合 垃圾回收器从线程运行情况分类有三种: 串行回收,Serial回收器,单线程回收,全程stw; 并行...

  • 7中垃圾回收器之间的组合关系

    7中垃圾回收器 3b3c42d2.jpg 关系1 参数:-XX:+UseSerialGC image.png 关系...

  • GC

    GC要关注的事情 where/which When How 垃圾回收器组合 新生代的垃圾回收器几乎都是复制法,90...

  • 每天一个知识点(7)-JVM-垃圾收集器

    上一节介绍了垃圾回收算法,垃圾收集器是垃圾回收算法的具体实现。这里以常见的垃圾收集器的组合方式进行介绍: Seri...

  • JVM-垃圾回收GC(2)

    垃圾回收器(Garbage Collectors) 常见组合:1.Serial + Serial Old2.Par...

  • GC - 收集器

    概述 垃圾收集器是垃圾回收算法的具体实现,不同商家、不同版本的 JVM 所提供的垃圾收集器可能会有差别 收集器组合...

  • JVM常见垃圾回收器介绍

    垃圾回收器简介 在新生代和老年代进行垃圾回收的时候,都是要用垃圾回收器进行回收的,不同的区域用不同的垃圾回收器。分...

  • 如何选择JVM垃圾回收器?

    明确垃圾回收器组合 -XX:+UseSerialGC 年轻代和老年代都用串行收集器-XX:+UseParNewGC...

  • 垃圾回收器和算法

    1.垃圾回收器种类 先看一下经典图片 它们之间的连线,说明了它们之间能配合使用,每种垃圾回收器我们先讲解一番,再来...

  • JVM调优之垃圾定位、垃圾回收算法、垃圾处理器对比

    谈垃圾回收器之前,要先讲讲垃圾回收算法,以及JVM对垃圾的认定策略,JVM垃圾回收器是垃圾回收算法的具体实现,了解...

网友评论

      本文标题:7中垃圾回收器之间的组合关系

      本文链接:https://www.haomeiwen.com/subject/nwcttftx.html