使用过JNI的童鞋们都知道这个玩意并不是那么简单而友好,许多个地方需要注意,并在实践中吃了亏才明白个中道理。这两天一直纠结于跟JNI相关的东西,现在总结如下:
1. 对于调用频繁的类、方法ID、字段ID可以缓存起来,但是要注意是在同一个线程中。
2. 定义Java代码和本地代码的界限,最大限度的减少两者之间的互相调用。
3. 本地代码中创建的引用(局部引用和全局引用)如果已经不需要了,就显式的删除掉吧,不要等虚拟机为你去作这个事情了,虽然它会做,但是不能确定虚拟机什么时候会去做。
4. 在可能会导致异常的调用后,始终检查异常情况,多一句ExceptionCheck,少一堆宕机的、莫名的烦恼。
5. 如果本地代码需要创建大量引用,用EnsureLocalCapacity告诉虚拟机,让虚拟机对本地引用作相应的优化。