何时以及如何释放NIO直接缓冲区?

 2023-01-20    280  

问题描述

我有一个C库,该库想要一个用于刮擦空间的临时缓冲区.我正在考虑将直接字节缓冲区的地址传达给它.

  • VM是否曾经允许在缓冲区最终释放之前重新安置它?
    JNI框架消失后,本地库将坚持指针.我的理解是,JNI本地对象引用无法缓存,因为VM可以在GC期间重新安置它们.这是否适用于缓冲区地址?

    何时以及如何释放NIO直接缓冲区?

  • 我知道,如果我在Java中分配缓冲区,然后让缓冲区对象脱离范围,则VM将释放缓冲器内存.如果我使用newDirectByteBuffer在本机代码中创建新的缓冲区,那么谁的责任是释放备份内存?

  • 如果我使用newDirectByteBuffer在本机代码中创建新的缓冲区以及直接缓冲区正在使用的地址会发生什么?记忆会倍增吗? VM参考会计算内存块并尝试在最后一个缓冲区引用是收集垃圾时尝试释放的吗?

推荐答案

是VM曾经允许重新安置的
缓冲区最终被释放之前?

它不会重新安置它,因为直接缓冲区不是GC堆的一部分.

如果我在本机中创建新的缓冲区
使用newDirectByteBuffer的代码
责任是释放
备份内存?

释放它是您的(本机代码)责任. JVM不知道使用了哪种方法来分配备用商店(可能是malloc,可能是静态缓冲区等)

)

如果我创建一个新的缓冲区会发生什么
在本机代码中使用
newDirectbyteBuffer和一个地址
直接缓冲区已经使用?

鉴于VM不会尝试释放其地址传递给newDirectbyteBuffer的内存,如果您两次通过相同的地址,则不会发生任何事情.

以上所述是小编给大家介绍的何时以及如何释放NIO直接缓冲区?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26023.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。