使用 Java Native Interface 的最佳实践
2013-06-26 14:10
281 查看
避免最常见的 10 大 JNI 编程错误的技巧和工具http://www.ibm.com/developerworks/cn/java/j-jni/index.html级别: 中级Michael Dawson, 高级软件开发人员, IBM
Graeme Johnson, J9 虚拟机开发经理, IBM
Andrew Low, STSM,J9 虚拟机, IBM2009 年 7 月 27 日Java 本机接口(Java Native Interface,JNI)是一个标准的 Java API,它支持将 Java 代码与使用其他编程语言编写的代码相集成。如果您希望利用已有的代码资源,那么可以使用 JNI 作为您工具包中的关键组件 —— 比如在面向服务架构(SOA)和基于云的系统中。但是,如果在使用时未注意某些事项,则 JNI 会迅速导致应用程序性能低下且不稳定。本文将确定 10 大 JNI 编程缺陷,提供避免这些缺陷的最佳实践,并介绍可用于实现这些实践的工具。本文介绍 JNI 用户最常遇到的 10 大编码和设计错误。其目标是帮助您认识到并避免它们,以便您可以编写安全、高效、性能出众的 JNI 代码。本文还将介绍一些用于在新代码或已有代码中查找这些问题的工具和技巧,并展示如何有效地应用它们。JNI 编程缺陷可以分为两类:性能:代码能执行所设计的功能,但运行缓慢或者以某种形式拖慢整个程序。
正确性:代码有时能正常运行,但不能可靠地提供所需的功能;最坏的情况是造成程序崩溃或挂起。
性能缺陷程序员在使用 JNI 时的 5 大性能缺陷如下:不缓存方法 ID、字段 ID 和类
触发数组副本
回访(Reaching back)而不是传递参数
错误认定本机代码与 Java 代码之间的界限
使用大量本地引用,而未通知 JVM
正确性缺陷5 大 JNI 正确性缺陷包括:使用错误的 JNIEnv
未检测异常
未检测返回值
未正确使用数组方法
未正确使用全局引用
避免常见缺陷假设您编写了一些新 JNI 代码,或者继承了别处的某些 JVI 代码,如何才能确保避免了常见缺陷,或者在继承代码中发现它们?表 1 提供了一些确定这些常见缺陷的技巧:
表 1. 确定 JNI 编程缺陷的清单
您可以在开发周期的早期确定许多常见缺陷,方法如下:根据规范验证新代码
分析方法跟踪
使用 -verbose:jni 选项
生成转储
执行代码审查
Graeme Johnson, J9 虚拟机开发经理, IBM
Andrew Low, STSM,J9 虚拟机, IBM2009 年 7 月 27 日Java 本机接口(Java Native Interface,JNI)是一个标准的 Java API,它支持将 Java 代码与使用其他编程语言编写的代码相集成。如果您希望利用已有的代码资源,那么可以使用 JNI 作为您工具包中的关键组件 —— 比如在面向服务架构(SOA)和基于云的系统中。但是,如果在使用时未注意某些事项,则 JNI 会迅速导致应用程序性能低下且不稳定。本文将确定 10 大 JNI 编程缺陷,提供避免这些缺陷的最佳实践,并介绍可用于实现这些实践的工具。本文介绍 JNI 用户最常遇到的 10 大编码和设计错误。其目标是帮助您认识到并避免它们,以便您可以编写安全、高效、性能出众的 JNI 代码。本文还将介绍一些用于在新代码或已有代码中查找这些问题的工具和技巧,并展示如何有效地应用它们。JNI 编程缺陷可以分为两类:性能:代码能执行所设计的功能,但运行缓慢或者以某种形式拖慢整个程序。
正确性:代码有时能正常运行,但不能可靠地提供所需的功能;最坏的情况是造成程序崩溃或挂起。
性能缺陷程序员在使用 JNI 时的 5 大性能缺陷如下:不缓存方法 ID、字段 ID 和类
触发数组副本
回访(Reaching back)而不是传递参数
错误认定本机代码与 Java 代码之间的界限
使用大量本地引用,而未通知 JVM
正确性缺陷5 大 JNI 正确性缺陷包括:使用错误的 JNIEnv
未检测异常
未检测返回值
未正确使用数组方法
未正确使用全局引用
避免常见缺陷假设您编写了一些新 JNI 代码,或者继承了别处的某些 JVI 代码,如何才能确保避免了常见缺陷,或者在继承代码中发现它们?表 1 提供了一些确定这些常见缺陷的技巧:
表 1. 确定 JNI 编程缺陷的清单
未缓存 | 触发数组副本 | 错误界限 | 过多回访 | 使用大量本地引用 | 使用错误的 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 |
分析方法跟踪
使用 -verbose:jni 选项
生成转储
执行代码审查
相关文章推荐
- Java 安全套接字编程以及 keytool 使用最佳实践
- 在Java中使用定时任务的最佳实践
- Java设计和使用异常的最佳实践
- Java 安全套接字编程以及 keytool 使用最佳实践
- chap 20:使用 Java Native Interface 的最佳实践
- atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 。打开浏览服务器文件夹java .net php
- 使用 Java Native Interface 的最佳实践
- chap 20:使用 Java Native Interface 的最佳实践
- atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 。打开浏览服务器文件夹java .net php
- Java 安全套接字编程以及 keytool 使用最佳实践
- 使用 Java Native Interface 的最佳实践
- chap 20:使用 Java Native Interface 的最佳实践2
- Java 安全套接字编程以及 keytool 使用最佳实践
- atitit.人脸识别的应用场景and使用最佳实践 java .net php
- Java 异常、自定义异常与使用最佳实践
- Atitit. 异常的使用总结最佳实践java .net php Vo8f
- Java自定义异常与异常使用最佳实践
- atitit.人脸识别的应用场景and使用最佳实践 java .net php
- 在objc项目中使用常量的最佳实践(JAVA和as3)好像都是这样
- 使用 Java Native Interface 的最佳实践