加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

JVM / JAVA中的预取指令

发布时间:2020-12-14 16:19:55 所属栏目:Java 来源:网络整理
导读:是否有 Java语言或JVM中的任何软件预取指令,如GCC中提供的 __builtin_prefetch 解决方法 一个有趣的事情是,Hotspot JVM实际上支持预取! 它将Unsafe.prefetchRead()和Unsafe.prefetchWrite()方法视为内在函数,并将其编译为相应的CPU指令. 不幸的是,sun.misc.
是否有 Java语言或JVM中的任何软件预取指令,如GCC中提供的 __builtin_prefetch

解决方法

一个有趣的事情是,Hotspot JVM实际上支持预取!
它将Unsafe.prefetchRead()和Unsafe.prefetchWrite()方法视为内在函数,并将其编译为相应的CPU指令.

不幸的是,sun.misc.Unsafe不声明这种方法.但是,如果您将以下方法添加到Unsafe.java中,请重新编译并替换rt.jar中的Unsafe.class(或仅添加-Xbootclasspath / p JVM参数),您将能够在应用程序中使用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);

我怀疑这可能有助于实际应用,但如果你想玩它,我可以提供更多的细节.
这是JDK 8的一个编译补丁,可以实现预取方式:download

用法示例:

long[] array = new long[100*1024*1024];
// ...
sun.misc.Unsafe.prefetchReadStatic(array,50*1024*1024);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读