天天看點

JNI之路徑初探---6

本篇文章講解JNI下屬性的記憶體釋放問題,衆所周知,JAVA有四大引用,1,強引用2,弱引用3,軟引用4,虛引用。JNI有三大引用,1,普通全局引用2,弱全局引用3,局部引用。

1,Native方法執行完最後一行代碼完畢後,方法内的所有局部對象全部自動釋放記憶體。

2,弱、普通全局引用是跨線程、方法的,不同的是全局引用必須手動調用(env)->DeleteGlobalRef(env, 引用);才能釋放記憶體,而弱全局适用于包裝那些使用不頻繁的屬性,它是不穩定的,因為它不會阻止垃圾回收機制釋放其記憶體,隻要記憶體不夠,弱引用就可能被釋放。

3,引用的比較用(env)->IsSameObject(env, obj_1, obj_2),特殊的一點如果比較的是NULL,NULL是JVM下的對象,如果你比對的對象是null,盡管"相同",但是會不同。

![清除局部變量記憶體.png](http://upload-images.jianshu.io/upload_images/3027456-22e01444560b3e9c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)