apa*_*gin 27
一个有趣的事情是Hotspot JVM实际上支持预取!
它将内容Unsafe.prefetchRead()和Unsafe.prefetchWrite()方法视为内在函数,并将它们编译为相应的CPU指令.
不幸的是,sun.misc.Unsafe没有声明这样的方法.但是,如果您将以下方法添加到Unsafe.java,重新编译它并替换rt.jar中的Unsafe.class(或者只是添加-Xbootclasspath/pJVM参数),您就可以在应用程序中使用prefetch内在函数.
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);
Run Code Online (Sandbox Code Playgroud)
我怀疑这对实际应用程序有多大帮助,但如果你想玩它,我可以提供更多细节.
这是JDK 8的编译补丁,它支持预取方法:下载
用法示例:
long[] array = new long[100*1024*1024];
// ...
sun.misc.Unsafe.prefetchReadStatic(array, 50*1024*1024);
Run Code Online (Sandbox Code Playgroud)
UPDATE
Unsafe.prefetch*在JDK 9 中完全删除了内在函数:
注意读/写预取支持是作为实验实现的,以查看JDK库代码是否可以将其用于性能优势.然而,实验结果并未表明这是值得的.因此,sun.misc.Unsafe中没有相应的预取本机方法声明.
| 归档时间: |
|
| 查看次数: |
2307 次 |
| 最近记录: |