<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <tt>This is essentially an API design bug; because values() returns
      an array, and arrays are mutable, it must copy the array every
      time.  Otherwise some miscreant could change the contents of this
      array, and other consumers of `values()` would see wrong data.  <br>
      <br>
      There are a number of ways this could be improved, each with their
      pros and cons:<br>
      <br>
       - Add a new method, valuesAsList(), which would return an
      immutable list which could be cached and shared.  (Arguably this
      is what Enum::values should have done in the first place.)  Easy
      to add, but puts the burden on users to change their code.  <br>
      <br>
       - Wait for the JVM to support frozen arrays, and then have
      values() return a frozen array.  This would allow sharing.  It is
      a behavior-incompatible change, but one we could probably
      justify.  <br>
      <br>
       - Have the compiler recognize that the array returned from
      values() is confined to a scope from which it does not escape and
      is not mutated, and if so, perform some sort of transformation
      (such as the one suggested in the mail you link to.)  <br>
      <br>
       - Similar to the previous, but using JIT optimizations.  <br>
      <br>
      <br>
      I'm not too hot on either the static or dynamic compiler
      transformation routes; I think the return-on-complexity is not
      that good.  The new method is the easiest, but it might look silly
      if the frozen arrays solution comes around soon.  <br>
    </tt><br>
    <div class="moz-cite-prefix">On 7/25/2018 1:23 AM, nezih yigitbasi
      wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CALur2hWSf3_2YCosuUbu=ypeK6vhwc=Jc+tHERBearKBg4hewA@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=utf-8">
      <div dir="ltr"><span
style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">Hi,</span><br
style="font-size:small;text-decoration-style:initial;text-decoration-color:initial">
        <span
style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">I
          recently noticed in our app that Enum.values() allocates a
          significant amount of memory when called in a tight loop as it
          clones the constant values array (which is probably for
          immutability, and I can understand that). I found that the
          same issue has been discussed back in 2012: </span><a
href="http://mail.openjdk.java.net/pipermail/compiler-dev/2012-March/004210.html"
          style="color:rgb(17,85,204);font-size:small" target="_blank"
          moz-do-not-send="true">http://mail.openjdk.java.net/pipermail/compiler-dev/2012-March/004210.html</a>
        <div
style="font-size:small;text-decoration-style:initial;text-decoration-color:initial"><br>
        </div>
        <div
style="font-size:small;text-decoration-style:initial;text-decoration-color:initial">Are
          there any plans to address this issue going forward?<br>
          <br>
          Thanks!</div>
        <br>
      </div>
    </blockquote>
    <br>
  </body>
</html>