4

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);

有没有办法从对象引用访问内存地址,也许默认 hashCode 实现返回的整数会起作用,所以你可以这样做......

 unsafe.freeMemory(p.hashCode());

好像不太对...

4

1 回答 1

13
  • 对象引用的“内存地址”没有意义,因为对象可以跨 Java 堆移动。
  • 您不能显式释放由 分配的空间Unsafe.allocateInstance,因为该空间属于 Java Heap,只有垃圾收集器才能释放它。
  • 如果你想在 Java Heap 之外进行自己的内存管理,你可以使用Unsafe.allocateMemory/Unsafe.freeMemory方法。它们处理表示为的原始内存地址long。但是,此内存不适用于 Java 对象。
于 2014-06-26T13:19:50.993 回答