避免最常见的 10 大 JNI 编程错误的技巧和工具
http://www.i
级别: 中级
Michael Dawson, 高级软件开发人员, IBM
Graeme Johnson, J9 虚拟机开发经理, IBM
Andrew Low, STSM,J9 虚拟机, IBM
2009 年 7 月 27 日
Java 本机接口(Java Native Interface,JNI)是一个标准的 Java API,它支持将 Java 代码与使用其他编程语言编写的代码相集成。如果您希望利用已有的代码资源,那么可以使用 JNI 作为您工具包中的关键组件 —— 比如在面向服务架构(SOA)和基于云的系统中。但是,如果在使用时未注意某些事项,则 JNI 会迅速导致应用程序性能低下且不稳定。本文将确定 10 大 JNI 编程缺陷,提供避免这些缺陷的最佳实践,并介绍可用于实现这些实践的工具。
本文介绍 JNI 用户最常遇到的 10 大编码和设计错误。其目标是帮助您认识到并避免它们,以便您可以编写安全、高效、性能出众的 JNI 代码。本文还将介绍一些用于在新代码或已有代码中查找这些问题的工具和技巧,并展示如何有效地应用它们。
JNI 编程缺陷可以分为两类:
- 性能:代码能执行所设计的功能,但运行缓慢或者以某种形式拖慢整个程序。
- 正确性:代码有时能正常运行,但不能可靠地提供所需的功能;最坏的情况是造成程序崩溃或挂起。
程序员在使用 JNI 时的 5 大性能缺陷如下:
5 大 JNI 正确性缺陷包括:
假设您编写了一些新 JNI 代码,或者继承了别处的某些 JVI 代码,如何才能确保避免了常见缺陷,或者在继承代码中发现它们?表 1 提供了一些确定这些常见缺陷的技巧:
未缓存 | 触发数组副本 | 错误界限 | 过多回访 | 使用大量本地引用 | 使用错误的 JNIEnv | 未检测异常 | 未检测返回值 | 未正确使用数组 | 未正确使用全局引用 | |
---|---|---|---|---|---|---|---|---|---|---|
规范验证 | X | X | X | |||||||
方法跟踪 | X | X | X | X | X | X | X | |||
转储 | X | |||||||||
-verbose:jni | X | |||||||||
代码审查 | X | X | X | X | X | X | X | X | X | X |
您可以在开发周期的早期确定许多常见缺陷,方法如下: