Java 在本机代码中使用sun.misc.Unsafe.allocateMemory()分配的内存

Java 在本机代码中使用sun.misc.Unsafe.allocateMemory()分配的内存,java,java-native-interface,unsafe,Java,Java Native Interface,Unsafe,我正在尝试使用sun.misc.Unsafe.allocateMemory()分配内存,并在本机代码中访问它 然而,allocateMemory返回的long值在C代码中似乎不是正确的地址 Unsafe unsafe = getUnsafe(); long address = unsafe.allocateMemory(64); for (int i = 0; i < 64; i += 8)

我正在尝试使用sun.misc.Unsafe.allocateMemory()分配内存,并在本机代码中访问它

然而,allocateMemory返回的long值在C代码中似乎不是正确的地址

            Unsafe unsafe = getUnsafe();
            long address = unsafe.allocateMemory(64);

            for (int i = 0; i < 64; i += 8)
                unsafe.putByte(memory + i, (byte) 0xFF);

            nativeMethod(address);
Unsafe-Unsafe=getUnsafe();
长地址=不安全。分配内存(64);
对于(int i=0;i<64;i+=8)
不安全.putByte(内存+i,(字节)0xFF);
nativeMethod(地址);
但是,在我的本机代码中,当我尝试将“地址”作为指针访问时,它不起作用:(

更新:我附上了一张显示问题的图片。 我将“地址”传递给本机代码,但是,检查该位置的内存不会显示我在其中输入的0xFF值

图像:


我认为它工作得非常好!您的“for”循环将每八个字节设置为
0xff
,如果您仔细查看显示和计数,您会发现每八个字节都是
0xff
。其中还有一些其他随机值,因为
不安全。allocateMemory()
不返回零内存;它返回未初始化的内存,就像C的
malloc()
一样


如果你把“i++=8”改为“i++”,那么每个字节都将是
0xff
;值得做那个实验来证明自己它是有效的。

如何不起作用?你也需要显示本机代码。好的,我已经解释了“如何”了,甚至附上了一个图像,现在你是正确的。谢谢!我忽略了内存分配是采用“byte”参数和had的事实基本上一切都搞砸了。如果我们见面,提醒我给你买杯啤酒:)