使用過JNI的童鞋們都知道這個玩意并不是那么簡單而友好,許多個地方需要注意,并在實踐中吃了虧才明白個中道理。這兩天一直糾結于跟JNI相關的東西,現在總結如下:
1. 對于調用頻繁的類、方法ID、字段ID可以緩存起來,但是要注意是在同一個線程中。
2. 定義Java代碼和本地代碼的界限,最大限度的減少兩者之間的互相調用。
3. 本地代碼中創建的引用(局部引用和全局引用)如果已經不需要了,就顯式的刪除掉吧,不要等虛擬機為你去作這個事情了,雖然它會做,但是不能確定虛擬機什么時候會去做。
4. 在可能會導致異常的調用后,始終檢查異常情況,多一句ExceptionCheck,少一堆宕機的、莫名的煩惱。
5. 如果本地代碼需要創建大量引用,用EnsureLocalCapacity告訴虛擬機,讓虛擬機對本地引用作相應的優化。