Я вызывал функцию «unsafe.allocateMemory» для большей части памяти из-за кучи. Но возвращаемое значение является нечетным.Что небезопасно.allocateMemory возвращается в Java
время выполнения среда показывает здесь:
Вот мой код:
import java.lang.reflect.Field;
import sun.misc.Unsafe;
public class UnsafeTest{
public static void main(String[] args){
try{
Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
theUnsafe.setAccessible(true);
Unsafe unsafe = (Unsafe) theUnsafe.get(null);
long addr = unsafe.allocateMemory(16);
System.out.println("the address is :"+addr);
unsafe.freeMemory(addr);
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
Результат:
Я думал, что что-то не так, потому что значение результата настолько больше, чем общий объем памяти (около 6G). Интересно, было ли значение адресом памяти? Если да, то как это можно выделить, поскольку на самом деле не так много памяти. Если нет, то какой базовый адрес памяти/кучи в ОС.
http://hg.openjdk.java .net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/sun/misc/Unsafe.java # l466 –
Использование Unsafe предназначено только для продвинутого программирования на низком уровне. Я предлагаю вам не претендовать на это. – DwB
https://en.wikipedia.org/wiki/X86-64#Virtual_address_space_details –