如果你在Java中运行调用本地库的代码,那么通常的方法是什么来释放这些库分配的内存,当内存分配应该持续对象的生命周期?在C++中,我会使用析构函数,但是Java从来没有真正拥有过这些,并且现在甚至更少。
我最感兴趣的特定情况是JOCL,其中我有一个包装编译后的OpenCL内核及其始终相同的所有参数的对象。表示编译后的内核和参数的结构都在库侧分配,JOCL提供了一个方法
我认为如果对象在程序终止时仍存在,则操作系统会清理所有内容,但是我对在线程中创建的对象并不确定。所以:
1. 如果您希望在垃圾回收对象时释放本地内存,是否有适当的位置来调用释放内存的方法?
2. 如果该对象将持续存在于线程的整个生命周期中,是否有适当的位置来进行此调用,或者这是否必要?
我最感兴趣的特定情况是JOCL,其中我有一个包装编译后的OpenCL内核及其始终相同的所有参数的对象。表示编译后的内核和参数的结构都在库侧分配,JOCL提供了一个方法
clReleaseMemObject
,您可以调用该方法来减少引用计数器,指示何时删除对象(请注意,这与直接释放内存有所不同,在这种情况下可能并不重要)。我认为如果对象在程序终止时仍存在,则操作系统会清理所有内容,但是我对在线程中创建的对象并不确定。所以:
1. 如果您希望在垃圾回收对象时释放本地内存,是否有适当的位置来调用释放内存的方法?
2. 如果该对象将持续存在于线程的整个生命周期中,是否有适当的位置来进行此调用,或者这是否必要?