Java Unsafe类允许您按以下方式为对象分配内存,但使用此方法,当完成时如何释放已分配的内存,因为它不会提供内存地址...
有没有一种方法可以从对象引用中访问内存地址,也许默认hashCode实现返回的整数会起作用,这样你就可以做...
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);
有没有一种方法可以从对象引用中访问内存地址,也许默认hashCode实现返回的整数会起作用,这样你就可以做...
unsafe.freeMemory(p.hashCode());
看起来不太对劲...
Unsafe.allocateInstance
可能会在Java堆之外分配对象。但这是不正确的。allocateInstance
的工作方式与new Object()
完全相同,只是它不调用构造函数。 - apangin