Github user kiszk commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22993#discussion_r232488912
  
    --- Diff: common/unsafe/src/main/java/org/apache/spark/unsafe/Platform.java 
---
    @@ -67,6 +67,59 @@
         unaligned = _unaligned;
       }
     
    +  // Access fields and constructors once and store them, for performance:
    +
    +  private static final Constructor<?> DBB_CONSTRUCTOR;
    +  private static final Field DBB_CLEANER_FIELD;
    +  static {
    +    try {
    +      Class<?> cls = Class.forName("java.nio.DirectByteBuffer");
    +      Constructor<?> constructor = cls.getDeclaredConstructor(Long.TYPE, 
Integer.TYPE);
    +      constructor.setAccessible(true);
    +      Field cleanerField = cls.getDeclaredField("cleaner");
    +      cleanerField.setAccessible(true);
    +      DBB_CONSTRUCTOR = constructor;
    +      DBB_CLEANER_FIELD = cleanerField;
    +    } catch (ClassNotFoundException | NoSuchMethodException | 
NoSuchFieldException e) {
    +      throw new IllegalStateException(e);
    +    }
    +  }
    +
    +  private static final Method CLEANER_CREATE_METHOD;
    +  static {
    +    // The implementation of Cleaner changed from JDK 8 to 9
    +    int majorVersion = 
Integer.parseInt(System.getProperty("java.version").split("\\.")[0]);
    --- End diff --
    
    From Java 9, here is a [new 
definition](https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-3A71ECEF-5FC5-46FE-9BA9-88CBFCE828CB).
    
    I confirmed it can work for OpenJDK, OpenJ9, and IBM JDK 8 by running the 
following code
    ```
    public class Version {
      public static void main(String[] args){
        System.out.println("jave.specification.version=" + 
System.getProperty("java.specification.version"));
        System.out.println("jave.version=" + 
System.getProperty("java.version"));
        System.out.println("jave.version.split(\".\")[0]=" + 
System.getProperty("java.version").split("\\.")[0]);
      }
    }
    ```
    
    OpenJDK
    ```
    $ ../OpenJDK-8/java -version
    java version "1.8.0_162"
    Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
    Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
    
    $ ../OpenJDK-8/java Version
    jave.specification.version=1.8
    jave.version=1.8.0_162
    jave.version.split(".")[0]=1
    
    $ ../OpenJDK-9/java -version
    openjdk version "9"
    OpenJDK Runtime Environment (build 9+181)
    OpenJDK 64-Bit Server VM (build 9+181, mixed mode)
    
    $ ../OpenJDK-9/java Version
    jave.specification.version=9
    jave.version=9
    jave.version.split(".")[0]=9
    
    $ ../OpenJDK-11/java -version
    openjdk version "11.0.1" 2018-10-16
    OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
    OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
    
    $ ../OpenJDK-11/java Version
    jave.specification.version=11
    jave.version=11.0.1
    jave.version.split(".")[0]=11
    ```
    
    OpenJ9
    ```
    $ ../OpenJ9-8/java -version
    openjdk version "1.8.0_192"
    OpenJDK Runtime Environment (build 1.8.0_192-b12)
    Eclipse OpenJ9 VM (build openj9-0.11.0, JRE 1.8.0 Windows 10 amd64-64-Bit 
Compressed References 20181019_105 (JIT enabled, AOT enabled)
    OpenJ9   - 090ff9dc
    OMR      - ea548a66
    JCL      - 51609250b5 based on jdk8u192-b12)
    
    $ ../OpenJ9-8/java Version
    jave.specification.version=1.8
    jave.version=1.8.0_192
    jave.version.split(".")[0]=1
    
    $ ../OpenJ9-9/java -version
    openjdk version "9.0.4-adoptopenjdk"
    OpenJDK Runtime Environment (build 9.0.4-adoptopenjdk+12)
    Eclipse OpenJ9 VM (build openj9-0.9.0, JRE 9 Windows 8.1 amd64-64-Bit 
Compressed References 20180814_161 (JIT enabled, AOT enabled)
    OpenJ9   - 24e53631
    OMR      - fad6bf6e
    JCL      - feec4d2ae based on jdk-9.0.4+12)
    
    $ ../OpenJ9-9/java Version
    jave.specification.version=9
    jave.version=9.0.4-adoptopenjdk
    jave.version.split(".")[0]=9
    
    
    $ ../OpenJ9-11/java -version
    openjdk version "11.0.1" 2018-10-16
    OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.1+13)
    Eclipse OpenJ9 VM AdoptOpenJDK (build openj9-0.11.0, JRE 11 Windows 10 
amd64-64-Bit Compressed References 20181020_83 (JIT enabled, AOT enabled)
    OpenJ9   - 090ff9dc
    OMR      - ea548a66
    JCL      - f62696f378 based on jdk-11.0.1+13)
    
    $ ../OpenJ9-11/java Version
    jave.specification.version=11
    jave.version=11.0.1
    jave.version.split(".")[0]=11
    ```
    
    IBM JDK
    ```
    $ ../IBMJDK-8/java -version
    java version "1.8.0"
    Java(TM) SE Runtime Environment (build pwa6480-20150129_02)
    IBM J9 VM (build 2.8, JRE 1.8.0 Windows 8.1 amd64-64 Compressed References 
20150116_231420 (JIT enabled, AOT enabled)
    J9VM - R28_Java8_GA_20150116_2030_B231420
    JIT  - tr.r14.java_20150109_82886.02
    GC   - R28_Java8_GA_20150116_2030_B231420_CMPRSS
    J9CL - 20150116_231420)
    JCL - 20150123_01 based on Oracle jdk8u31-b12
    
    $ ../IBMJDK-8/java Version
    jave.specification.version=1.8
    jave.version=1.8.0
    jave.version.split(".")[0]=1
    ```



---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to