这段是关于Android的。情况如下:
C++库和Java包装类再加上本地函数(JNI),用于处理来自库中的C++类。当通用Java代码需要C++对象时,它会创建相应的Java包装器对象,该对象通过本地函数创建C++对象,并将指针记入“long”变量。在所有后续操作中,包装器将此指针传递给本地函数等。
问题是什么:
如何在结束时释放所有分配的C++对象?目前,每个包装类都有一个“finalize”方法,在其中调用本地函数以释放C++对象,但Android不能保证调用“finalize”!另一方面,通常C++库不知道Java代码分配了多少个和哪些类型的C++对象。
当我们的Java应用程序终止时,剩余的已分配内存会发生什么情况,当操作系统卸载库时,Android会自动释放使用本地库的整个堆吗?
C++库和Java包装类再加上本地函数(JNI),用于处理来自库中的C++类。当通用Java代码需要C++对象时,它会创建相应的Java包装器对象,该对象通过本地函数创建C++对象,并将指针记入“long”变量。在所有后续操作中,包装器将此指针传递给本地函数等。
问题是什么:
如何在结束时释放所有分配的C++对象?目前,每个包装类都有一个“finalize”方法,在其中调用本地函数以释放C++对象,但Android不能保证调用“finalize”!另一方面,通常C++库不知道Java代码分配了多少个和哪些类型的C++对象。
当我们的Java应用程序终止时,剩余的已分配内存会发生什么情况,当操作系统卸载库时,Android会自动释放使用本地库的整个堆吗?