<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Hi Jon,<div><br></div><div>Slightly off topic.</div><div><br></div><div>This question triggered me to once again take a closer look at psAdaptiveSizePolicy and CMSAdaptiveSizePolicy. What I saw is that</div><div><br></div><div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">uint PSAdaptiveSizePolicy::compute_survivor_space_size_and_threshold(</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">                                             <span style="color: #bb2ca2">bool</span> is_survivor_overflow,</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">                                             uint tenuring_threshold,</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">                                             size_t survivor_limit) {</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;"><br></div><div style="margin: 0px;">and</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;"><br></div><div style="margin: 0px;"><div style="font-family: Menlo; font-size: 11px; margin: 0px;">uint CMSAdaptiveSizePolicy::compute_survivor_space_size_and_threshold(</div><div style="font-family: Menlo; font-size: 11px; margin: 0px;">                                             <span style="color: #bb2ca2">bool</span> is_survivor_overflow,</div><div style="font-family: Menlo; font-size: 11px; margin: 0px;">                                             uint tenuring_threshold,</div><div style="font-family: Menlo; font-size: 11px; margin: 0px;">                                             size_t survivor_limit) {</div><div style="font-family: Menlo; font-size: 11px; margin: 0px;"><br></div><div style="margin: 0px;">are cut and paste copies of each other. In fact the amount of common code in both classes suggests they were a complete cut and paste copy of each other. Yes there are a couple of minor differences but not enough to warrant two separate classes. It’s also a bit scary to see this level of cut and paste in the JVM source code. Maybe it was intentional, if so it should have been justified with a comment but … I’ll say no more on this topic.</div><div style="margin: 0px;"><br></div><div style="margin: 0px;">As I’ve mentioned before, AdaptiveSize can get into this degenerative pathological condition in low free heap conditions. It starts with higher GC frequencies slowing the allocation rates from the mutator threads. These lower allocation rates when feed back into adaptive sizing, are a signal to shrink the size of heap which is exactly the opposite of what you’d like to see in this condition. I have offered to work on a patch to fix this but I’ve been told by several people that they have a patch to correct this behavior so no need to do so.</div><div style="margin: 0px;"><br></div><div style="margin: 0px;">My question is, can we get one of these patches released so that we can correct this behavior?</div><div style="margin: 0px;"><br></div><div style="margin: 0px;">Kind regards,</div><div style="margin: 0px;">Kirk</div><div style="margin: 0px;"><br></div></div><div><div>On Mar 10, 2015, at 7:07 AM, Jon Masamitsu <<a href="mailto:jon.masamitsu@oracle.com">jon.masamitsu@oracle.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">
  
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  
  <div bgcolor="#FFFFFF" text="#000000">
    <br>
    <div class="moz-cite-prefix">On 3/9/2015 10:39 PM, Jungwoo Ha wrote:<br>
    </div>
    <blockquote cite="mid:CA+n_jhjTTzW5FMxtnUfO3pOi8KNjNU4uYqN6w9QjAuS40w722g@mail.gmail.com" type="cite">
      <div dir="ltr">We were investigating some features and figured out
        that ParallelScavange and ParNew has different TenuringTreshold
        heuristics.
        <div>We thought it would be nice to have a flag that can control
          the adaptiveness, so that we can fix it on purpose to isolate
          other performance factors.</div>
      </div>
    </blockquote>
    <br>
    Do you use UsePSAdaptiveSurvivorSizePolicy to turn off the <br>
    survivor space resizing and tenuring threshold adaptiveness<br>
    for ParallelGC?<br>
    <br>
    Jon<br>
    <br>
    <blockquote cite="mid:CA+n_jhjTTzW5FMxtnUfO3pOi8KNjNU4uYqN6w9QjAuS40w722g@mail.gmail.com" type="cite">
      <div dir="ltr">
        <div>--Jungwoo</div>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">On Mon, Mar 9, 2015 at 11:27 AM, Jon
          Masamitsu <span dir="ltr"><<a moz-do-not-send="true" href="mailto:jon.masamitsu@oracle.com" target="_blank">jon.masamitsu@oracle.com</a>></span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div bgcolor="#FFFFFF" text="#000000"> Jungwoo,<span class=""><br>
                <br>
                <div>On 03/06/2015 06:03 PM, Jungwoo Ha wrote:<br>
                </div>
                <blockquote type="cite">
                  <div dir="ltr">I think it is the same for all
                    JDK{7,8,9}.
                    <div><br>
                    </div>
                    <div>arguments.cpp disabled UseAdaptiveSizePolicy
                      for CMS.</div>
                    <div>parallel scavange initializes
                      _tenuring_threshold with</div>
                    <div>  _tenuring_threshold = (UseAdaptiveSizePolicy)
                      ? InitialTenuringThreshold : MaxTenuringThreshold;</div>
                    <div>whereas CMS uses</div>
                    <div>  _tenuring_threshold = MaxTenuringThreshold;</div>
                    <div><br>
                    </div>
                    <div>adjust_desired_tenuring_threshold() is called
                      inside ParNewGeneration::collect(), which calls
                      compute_tenuring_threshold.</div>
                    <div>It only uses MaxTenuringThreshold and
                      TargetSurvivorRatio.</div>
                    <div>I don't see any other flags here.<br>
                    </div>
                  </div>
                </blockquote>
                <br>
              </span> Yes, this is the intended behavior.<br>
              <br>
              You're saying we're sometimes wasting survivor space?<span class="HOEnZb"><font color="#888888"><br>
                  <br>
                  Jon</font></span><span class=""><br>
                <br>
                <blockquote type="cite">
                  <div class="gmail_extra"><br>
                    <div class="gmail_quote">On Fri, Mar 6, 2015 at 4:28
                      PM, Jon Masamitsu <span dir="ltr"><<a moz-do-not-send="true" href="mailto:jon.masamitsu@oracle.com" target="_blank">jon.masamitsu@oracle.com</a>></span>
                      wrote:<br>
                      <blockquote class="gmail_quote" style="margin:0 0
                        0 .8ex;border-left:1px #ccc
                        solid;padding-left:1ex">This is in jdk9?<span><font color="#888888"><br>
                            <br>
                            Jon</font></span>
                        <div>
                          <div><br>
                            <br>
                            On 3/6/2015 4:21 PM, Jungwoo Ha wrote:<br>
                            <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px
                              #ccc solid;padding-left:1ex"> On CMS when
                              UseAdaptiveSizePolicy is off, still
                              tenuring_threshold is being changed.<br>
                              Is this an intended behavior?<br>
                              (yes. I know it is not "size" related
                              heuristics)<br>
                              <br>
                              It would be nice to have a flag that can
                              disable adjusting tenuring threshold,<br>
                              or at least set minimum threshold. When
                              the default heuristics doesn't work,<br>
                              there are nothing much we can do other
                              than changing the Max.<br>
                              <br>
                              --Jungwoo<br>
                            </blockquote>
                            <br>
                          </div>
                        </div>
                      </blockquote>
                    </div>
                    <br>
                  </div>
                </blockquote>
                <br>
              </span></div>
          </blockquote>
        </div>
        <br>
      </div>
    </blockquote>
    <br>
  </div>

</blockquote></div><br></div></body></html>