![]() |
1
1
你对危险的假设是正确的,但有一点需要注意。 直接缓冲区的后备缓冲区可以在包含ByteBuffer的对象符合垃圾收集条件后的任何时候释放(释放本机内存的确切时间取决于实现,但通常大约在ByteBuffer的终结器运行时发生)。 从标准Java来看,这个“悬空指针”不会带来真正的问题,因为它和另一个指针一样长,您不能不安全地使用它。当然,如果您将其传递给一些本机或不安全的代码,并尝试将其用作指针,则可能会导致崩溃。 |
![]() |
2
-1
严格地说,不是按照您描述的方式,因为您只存储了
一旦您将其传递给一些本机(C/C++)代码,并开始使用它作为写入内容的地址,您就会遇到问题,因为对象的内存可能已经被垃圾收集器回收。
因此,所有这些访问都应该在本机代码(JNI)中完成,您可以使用本机API告诉虚拟机您的本机代码持有引用(或者不再持有引用)。您可以使用
|
|
user29759326 · 如何返回递归函数中的最后一个值? 4 月前 |
|
malife89 · 将java中的字符串读取为正确的日期格式 4 月前 |
![]() |
Tim · 在java中,有没有更快的方法将字节数组写入文件? 5 月前 |
![]() |
rudraraj · java中未声明最终变量 5 月前 |
![]() |
Bala Ji · 以下BFS的实施效率如何? 5 月前 |