Java是否允许直接内存访问?

我知道C#允许你在unsafe上下文中使用指针。 但是Java有一些类似的内存访问方法吗?

Java没有指针(出于很好的理由),所以如果有类似的内存访问方法,它会是什么?


那么,有一个sun.misc.Unsafe类。 它允许直接内存访问,所以你可以实现一些魔法,如重新演绎演员等等。 问题是你需要使用hacky的反射方法来获取实例,并且这个类没有真正的文档记录。 一般来说,在生产代码中使用这种工具需要非常好的理由。

以下是一个如何获得它的例子:

Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
Unsafe unsafe = (Unsafe) f.get(null);

有105种方法,允许不同的低级别的东西。 这些方法致力于直接内存访问:

  • allocateMemory
  • CopyMemory的
  • freeMemory
  • 的getAddress
  • getInt
  • 编辑:此方法可能与未来版本的OpenJDK或任何其他JVM实现不兼容,因为它不是公共API的一部分。 虽然许多OpenJDK代码使用不安全,但它的实现仍然是一个变化的主题,恕不另行通知。 感谢所有在评论中指出的人。


    不,你不能。

    你可以得到的最接近的是使用JNI并调用一个C函数来返回给定内存位置的数据。


    不,Java没有任何访问任意内存位置的语言内机制。 JNI可以执行操作系统允许的任何(不安全和不受管理的)操作,但这与您所得到的一样。

    链接地址: http://www.djcxy.com/p/31663.html

    上一篇: Does Java Allow Direct Memory Access

    下一篇: Which location address in a pointer refers to