<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body style="background-color: rgb(255, 255, 255); color: rgb(0, 0,
    0);" text="#000000" bgcolor="#FFFFFF">
    <br>
    <div class="moz-cite-prefix">On 02/25/2015 09:27 AM, Paul Sandoz
      wrote:<br>
    </div>
    <blockquote
      cite="mid:8169C677-C69F-479B-ABC6-2276F99168FD@oracle.com"
      type="cite"><!--[if !IE]><DIV style="border-left: 2px solid #009900; border-right: 2px solid #009900;  padding: 0px 15px; margin: 2px 0px;"><![endif]-->
      <pre wrap="">On Feb 25, 2015, at 12:20 AM, John Rose <a class="moz-txt-link-rfc2396E" href="mailto:john.r.rose@oracle.com"><john.r.rose@oracle.com></a> wrote:

</pre>
      <blockquote type="cite"><!--[if !IE]><DIV style="border-left: 2px solid #009900; border-right: 2px solid #009900;  padding: 0px 15px; margin: 2px 0px;"><![endif]-->
        <pre wrap="">On Feb 24, 2015, at 7:49 AM, Andrew Haley <a class="moz-txt-link-rfc2396E" href="mailto:aph@redhat.com"><aph@redhat.com></a> wrote:
</pre>
        <blockquote type="cite"><!--[if !IE]><DIV style="border-left: 2px solid #009900; border-right: 2px solid #009900;  padding: 0px 15px; margin: 2px 0px;"><![endif]-->
          <pre wrap=""></pre>
          <blockquote type="cite"><!--[if !IE]><DIV style="border-left: 2px solid #009900; border-right: 2px solid #009900;  padding: 0px 15px; margin: 2px 0px;"><![endif]-->
            <pre wrap="">There will be only one runtime Unsafe sub-type ever observed in a 
particular VM.
</pre>
            <!--[if !IE]></DIV><![endif]--></blockquote>
          <pre wrap="">Oh, that's very nice.
</pre>
          <!--[if !IE]></DIV><![endif]--></blockquote>
        <pre wrap="">That doesn't help with B accesses on L platforms and vice versa.
Having an optional boolean parameter (gating reverseBytes) will help.

</pre>
        <!--[if !IE]></DIV><![endif]--></blockquote>
      <!--[if !IE]></DIV><![endif]--></blockquote>
    <br>
    Or having another set of methods (with B/L suffix). I think the
    desired modes are:<br>
    -  native order (platform dependent but always fastest)<br>
    - BigEndian (platform independent, fast if equal to native order)<br>
    - LittleEndian (platform independent, fast if equal to native order)<br>
    <br>
    Having an order that is the opposite of native order is rarely
    needed, I think, since it is platform dependent and slower at the
    same time.<br>
    <br>
    <blockquote
      cite="mid:8169C677-C69F-479B-ABC6-2276F99168FD@oracle.com"
      type="cite"><!--[if !IE]><DIV style="border-left: 2px solid #009900; border-right: 2px solid #009900;  padding: 0px 15px; margin: 2px 0px;"><![endif]-->
      <pre wrap="">Yes, that's a good point.


</pre>
      <blockquote type="cite"><!--[if !IE]><DIV style="border-left: 2px solid #009900; border-right: 2px solid #009900;  padding: 0px 15px; margin: 2px 0px;"><![endif]-->
        <pre wrap="">Also, it makes Unsafe non-final, which frankly gives me the willies.
(Technical term, used by folks that have been through too many security escalations.)
Let's not create any new ways for industrious hackers to attack Unsafe.

</pre>
        <!--[if !IE]></DIV><![endif]--></blockquote>
      <pre wrap="">I was getting nervous about this too :-)</pre>
      <!--[if !IE]></DIV><![endif]--></blockquote>
    <br>
    I also felt uncomfortable, but for other reasons (like if intrinsics
    still behave the same in abstract class too). At least in JDK9,
    Unsafe should be hidden from any attackers, right?<br>
    <br>
    Is making class final any safer than making constructor private? Are
    there any known attacks on extending non-final classes with private
    constructors?<br>
    <br>
    Since these methods are unsafe, they naturally belong to Unsafe, but
    an alternative would be an all-Java implementation in a parallel
    class (Unsafe2). It wouldn't be any safer though. I just have a
    feeling that if implementation is in Java, it would be best if
    methods were as short as possible (for inlineability) and with as
    little conditional branches that only depend on platform setup and
    can't be optimized away in all modes of execution (interpreter, C1,
    C2).<br>
    <br>
    Regards, Peter<br>
    <br>
    <blockquote
      cite="mid:8169C677-C69F-479B-ABC6-2276F99168FD@oracle.com"
      type="cite"><!--[if !IE]><DIV style="border-left: 2px solid #009900; border-right: 2px solid #009900;  padding: 0px 15px; margin: 2px 0px;"><![endif]-->
      <pre wrap="">
Paul.
</pre>
      <!--[if !IE]></DIV><![endif]--></blockquote>
    <br>
  </body>
</html>