Java中的内存分配和地址

时间:2017-08-08 16:00:26

标签: java memory unsafe

我正在尝试关闭GC并在热门代码中手动管理内存。这是我正在尝试做的事情:

private static Unsafe unsafe = getUnsafe();

//...

long ptr = unsafe.allocateMemory(3);
String s = "abc";
byte[] bts = s.getBytes();  //{97,98,99}
for (int i = 0; i < bts.length; i++) {
    unsafe.putByte(ptr + i, bts[i]);    // <----------- Here
}
System.out.println(unsafe.getByte(ptr)); //97
System.out.println(unsafe.getByte(ptr + 1)); //98
System.out.println(unsafe.getByte(ptr + 2)); //99
unsafe.freeMemory(ptr);

程序打印出正确的结果,但我不确定我是否在这里没有得到一些未定义的行为。我要做的是在堆内存之外存储一些字节,并在删除这些字节时手动回收内存。

问题是这样做是否正确:

unsafe.putByte(ptr + i, bts[i]); //Just ptr + i

使用Unsafe::allocateMemory分配的内存可能不是顺序的或类似的内存。 JavaDoc并不清楚。你能帮我吗

0 个答案:

没有答案