我正在尝试关闭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并不清楚。你能帮我吗