数组引用的处理
在Java中,使用new关键字创建对象,创建之后我们就可以随意使用这个对象,我们无需关心这个对象是什么时候被回收的 ,对象的回收已经托管到了JVM的GC,由GC来帮我们回收无引用的对象。将对象引用传递给C/C++时,C/C++层就会持有Java对象,如果不进行妥善处理,对象多了就会出现内存泄漏问题,所以在C/C++层使用Java对象后,需要释放这个引用 。
|
|
|
|
引用释放
只要是Java对象,在C中都需要释放,如String类型引用:
|
|
在C中创建的对象引用也需要进行引用释放.
创建一个数组对象,并将引用传递给了Java层,将引用交给了Java之后,C就需要释放这个引用,不然会一直持有,GC也不会回收这个对象
|
|
JNI引用分类
局部引用
局部引用在本地方法调用的时间内有效,本地方法调用结束后会自动释放,每个局部引用都消耗一定的JVM资源,所以我们必须确保本地方法中不能过多的分配局部引用,尽管局部引用能够在方法调用后自动释放,但是过多的局部引用仍然可能导致虚拟机内存溢出。
|
|
全局引用
|
|
弱全局引用
节省内存,在内存不足时可以释放所引用的对象
可以引用一个不常用的对象,如果为NULL,临时创建
|
|