<div dir="ltr"><div>Dear Liang, thank you for your willing to contribute to Java elasticity!<br><br></div><div>Just a couple of days ago I met a customer who was struggling with unreleased and unused heap. He was so happy to hear that there is an improvement inside OpenJDK 12. And now he is already in process of upgrade to this new release.  </div><div><br></div><div>Regards <br>  <div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>---------- Forwarded message ----------<br>From: "毛亮(在弦)" <<a href="mailto:maoliang.ml@alibaba-inc.com" target="_blank">maoliang.ml@alibaba-inc.com</a>><br>To: hotspot-gc-dev <<a href="mailto:hotspot-gc-dev@openjdk.java.net" target="_blank">hotspot-gc-dev@openjdk.java.net</a>><br>Cc: <br>Bcc: <br>Date: Tue, 18 Jun 2019 19:25:44 +0800<br>Subject: G1 patch of elastic Java heap<br><div class="gmail-m_5910283256622024333__aliyun_email_body_block"><div style="line-height:1.7;font-family:simsun;font-size:14px;color:rgb(0,0,0)"><div>Dear OpenJDK developers,</div><div><br></div><div>Alibaba have developed an elastic heap feature for G1 GC and is willing to contribute it to OpenJDK.</div><div><br></div><div>As we know that in cloud environment memory is the key resource and there is already a similar implemented proposal <a href="http://openjdk.java.net/jeps/346" target="_blank">http://openjdk.java.net/jeps/346</a> in OpenJDK13, our patch is an independent implementation and contains some major enhancements as following:</div><div><br></div><div>1. stop-the-world free</div><div>In current implementation heap shrink/expand happens in stop-the-world time (G1 remark or full GC) while uncommitting heap memory like several GB in Linux might cost hundreds of milliseconds and even up to seconds. Alibaba's online services cannot tolerate these long pauses so the new elastic heap feature do the memory uncommitment and commitment concurrently and asynchronously. The Java application can still run smoothly with G1 "low latency".</div><div><br></div><div>2. More effective memory return<br><ul style="margin:0px;padding:0px;list-style:none;color:rgb(51,51,51);font-family:Arial,Helvetica,sans-serif;font-size:14px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;text-align:start;text-indent:0px;text-transform:none;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;overflow:hidden"><li><div>Current heap shrink heuristic relies on a major/full GC cycle(remark or full GC) to evaluate the heap usage while our patch's policy can treat young generation and old generation respectively. The Java application can promptly save the memory of young generation(default Max 60% of heap in G1) if young GC frequency is quite low and will soon recover the young generation's memory if young GC frequency boosts.</div></li></ul><div><br></div><div>The G1 elastic heap feature is already used in product environment in Alibaba cloud with AlibabaJDK8. We are glad to contribute it to OpenJDK upstream. Appreciate and look forward to your advises.</div></div><div><br></div><div>Thanks,</div><div>Liang</div><div><span style="font-family:simsun;font-size:14px;color:rgb(0,0,0)"><br></span></div></div></div></blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div style="font-size:12.8px"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div style="font-family:"Times New Roman""><span style="font-family:Calibri,sans-serif;font-size:15px">Ruslan</span><br style="font-family:Calibri,sans-serif;font-size:15px"><span style="font-family:Calibri,sans-serif;font-size:15px">CEO @ </span><span style="font-family:Calibri,sans-serif;font-size:15px"><a href="https://jelastic.com/" style="color:rgb(17,85,204)" target="_blank">Jelastic</a></span></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>