如何防止对象被垃圾收集?
是否有最终确定或幻像参考或任何其他方法的方法?
我在接受采访时被问到这个问题.面试官建议finalize()可以使用.
从 java 1.4 开始引入直接内存。新的 I/O (NIO) 类引入了一种基于通道和缓冲区执行 I/O 的新方法。NIO 添加了对直接 ByteBuffers 的支持,它可以直接传递到本机内存而不是 Java 堆。在某些情况下使它们显着更快,因为它们可以避免在 Java 堆和本机堆之间复制数据。
我一直不明白我们为什么要使用直接内存。有人可以帮忙举个例子吗?
我正在写一些使用ByteBuffers 的东西。在API的文档中它说
没有办法显式地释放缓冲区(没有 JVM 特定的反射)。缓冲区对象会受到 GC 的影响,在缓冲区对象变得不可访问后,通常需要两个 GC 周期才能释放堆外内存。
然而,在SO 帖子接受的答案中,我读到
BigMemory 通过直接 ByteBuffer 使用 JVM 进程的内存地址空间,与其他本机 Java 对象不同,BigMemory不受 GC 的影响。
现在我该怎么办,我应该释放创建的缓冲区吗?或者我误解了文档或答案中的某些内容?
是否可以自己执行内存管理.例如,我们在堆空间之外分配一块内存,这样它就不受GC的影响.我们自己负责从这块内存中分配/释放对象.
有些人指出了像Jmalloc/EHcache这样的框架.实际上我更想了解他们实际上是如何做到的.
我可以使用一些直接方法甚至是一些间接方法(例如,首先序列化java对象).