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