new*_*gic 4 java jvm memory-management directmemory
Java Unsafe类允许您按如下方式为对象分配内存,但是使用此方法如何释放完成时分配的内存,因为它不提供内存地址...
Field f = Unsafe.class.getDeclaredField("theUnsafe"); //Internal reference
f.setAccessible(true);
Unsafe unsafe = (Unsafe) f.get(null);
//This creates an instance of player class without any initialization
Player p = (Player) unsafe.allocateInstance(Player.class);
Run Code Online (Sandbox Code Playgroud)
有没有办法从对象引用访问内存地址,也许默认的hashCode实现返回的整数可以工作,所以你可以做...
unsafe.freeMemory(p.hashCode());
Run Code Online (Sandbox Code Playgroud)
似乎没有一些如何......
apa*_*gin 10
Unsafe.allocateInstance,因为此空间属于Java堆,并且只有垃圾收集器可以释放它.Unsafe.allocateMemory/ Unsafe.freeMemorymethods.它们处理表示为的原始内存地址long.但是,此内存不适用于Java对象.