gpt4 book ai didi

c# - Java是否允许直接内存访问

转载 作者:太空宇宙 更新时间:2023-11-03 17:41:52 25 4
gpt4 key购买 nike

我知道 C# 允许您在 unsafe 上下文中使用指针。但是Java有没有类似的内存访问方式呢?

Java 没有指针(有充分的理由),所以如果有类似的内存访问方法,它到底是什么?

最佳答案

嗯,有一个 sun.misc.Unsafe 类。它允许直接内存访问,因此您可以实现一些魔法,如重新解释转换等。问题是您需要使用 hacky 反射方法来获取实例,并且此类没有很好的文档记录。通常,您需要一个很好的理由才能在生产代码中使用这种工具。

这是一个如何获取它的例子:

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

有 105 种方法,允许不同的底层内容。这些方法专门用于直接内存访问:

  • 分配内存
  • 复制内存
  • 空闲内存
  • 获取地址
  • 获取整数

编辑:此方法可能与 future 版本的 OpenJDK 或任何其他 JVM 实现不兼容,因为它不是公共(public) API 的一部分。尽管许多 OpenJDK 代码使用了 Unsafe,但它的实现仍然是一个更改主题,恕不另行通知。感谢所有在评论中指出这一点的人。

关于c# - Java是否允许直接内存访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18172790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com