public native void prefetchRead(Object o, long offset);
public native void prefetchWrite(Object o, long offset);
public static native void prefetchReadStatic(Object o, long offset);
public static native void prefetchWriteStatic(Object o, long offset);
1 回答
一个有趣的事情是Hotspot JVM实际上是 does support 预取!
它将
Unsafe.prefetchRead()
和Unsafe.prefetchWrite()
方法视为内在函数,并将它们编译为相应的CPU指令 .不幸的是,
sun.misc.Unsafe
没有声明这样的方法 . 但是,如果您将以下方法添加到Unsafe.java,重新编译它并替换rt.jar中的Unsafe.class(或者只是添加-Xbootclasspath/p
JVM参数),您就可以在应用程序中使用预取内在函数 .我怀疑这对实际应用程序有多大帮助,但如果你想玩它,我可以提供更多细节 .
以下是JDK 8的编译补丁,它启用了预取方法:download
用法示例:
UPDATE
Unsafe.prefetch*
内在函数在JDK 9中完全是removed: