1、基本概念
JNI是Java Native Interface(Java本地接口)的缩写。所谓本地接口,是相对运行在Java虚拟机“沙箱”中的Java程序而言的,指直接运行在操作系统之上,与操作系统直接交互的程序。
JNI技术架构
可以形象直观地把JNI看做是Java和本地应用程序的黏合剂。
缺点:JNI牺牲了Java的平台移植性、JNI提高了应用系统之间的耦合度。
使用JNI调用本地程序接口的情况:
-- 为了实现Java语言所不能实现的功能:例如关闭系统、获取CPU繁忙程度等。
-- 为了获取更好的程序运行性能:和其他语言一样,Java程序运行的性能很大程度上取决于程序代码的编写质量,但 是在一些实时性要求高的应用场合,以“半编译”形态出现的Java语言是难以胜任的,这时借助运行性能更佳的本地程序来完成这些关键任务更为合理。
-- 为了保护历史投资
2、调用C程序
步骤:
(1) 编写主调方的Java类。该类要声明将调用的C函数,一方面载入本地的动态链接库文件(即.dll文件)。
(2) 使用javac命令编译Java类。
(3) 使用javah命令为C程序生成头文件(即.h文件)。在自动生成的头文件中将声明有待实现的C函数。
(4) 编写C程序。在C程序中实现头文件中声明的函数。
(5) 将C程序文件编译成动态链接库文件。
public class HelloWorld {
public native void displayHelloWorld();// 定义本地方法
public native void displayMyName();// 定义本地方法
/*
* 调入本地库,Java程序将在java.library.path参数所指向的路径,以及PATH环境变量所指向的路径中寻找并载入hello.dll文件。
* 可以使用System.load()以绝对路径的方式载入动态链接库,
* 例如:System.load("e:/somelibrary.dll")。在采用System.load()的情况下,不必设置环境变量和参数。
*/
static {
System.loadLibrary("hello");
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
new HelloWorld().displayMyName();
}
}
本地方法和接口方法:
Interface中声明的只是方法的结构而已,可以认为是对方法做出的定义,Interface自身并不实现方法,更没有能力提供方法;而native方法却可以认为是Class自身提供的方法,只不过这种方法不是由自身来实现的,而是依靠本地动态链接库输出的函数。
在Java中调用native方法和调用普通方法是完全相同的。
参考:http://book.csdn.net/bookfiles/606/10060619592.shtml
- 大小: 7.7 KB
分享到:
相关推荐
在这个"JNI的例子代码,程序设计"中,我们将深入探讨如何使用JNI来实现Java和C之间的相互调用。 首先,我们来看Java调C的部分。当Java代码需要调用C函数时,我们需要定义一个Java方法,并使用`native`关键字标记。这...
- **性能优化与内存管理**:针对Android平台的特定优化策略。 总的来说,JNI技术是Java开发者必备的技能之一,尤其在需要与本地代码交互或进行性能优化时。理解并熟练掌握JNI,能够极大地扩展Java应用程序的能力。
JNI作为Java与本地代码间的桥梁,为开发者提供了巨大的灵活性和性能优化的潜力。然而,正确理解和应用JNI的设计理念,遵循最佳实践,是在享受其带来的好处同时避免陷阱的关键。无论是初学者还是经验丰富的开发者,...
《实战JAVA虚拟机 JVM故障诊断与性能优化》是一本深度探讨Java虚拟机(JVM)的专著,旨在帮助开发者解决实际工作中遇到的JVM相关问题,提升系统的性能表现。通过对JVM内部机制的深入理解,我们可以更有效地调试、...
在这个视频课程中,讲师会深入探讨如何通过JNI实现Java与C++的有效结合,特别关注代码的稳定性和设计优化。 首先,课程的目标之一是避免在C层的全局变量中存储Java或C++对象的引用。全局变量在程序的整个生命周期内...
JNI(Java Native Interface)作为Java平台的重要组成部分,其核心价值在于能够使Java程序有效地利用现有的C/C++代码,进而实现性能优化或功能扩展。以下是使用JNI的四种常见场景: 1. **在Java程序中复用C/C++代码...
- 性能优化:虽然JNI提供了直接访问硬件的便利,但频繁的JNI调用会增加系统开销,因此应合理设计调用频率和数据传输策略。 综上所述,本项目展示了如何通过Android应用结合JNI技术,实现对硬件LED的控制,提供了一...
1. **复用已有C/C++代码**:对于那些已经存在且性能经过优化的C/C++代码,可以通过JNI将其集成到Java程序中,避免重复造轮子。 2. **实现自定义的Java虚拟机**:理解JNI的工作原理有助于开发者设计出更高效、更灵活...
总之,Java JNI编程进阶涉及到性能优化、本地系统接口调用和嵌入式开发等多个方面,是一种强大的工具,能够帮助开发者充分利用Java的平台无关性和本地代码的高性能,同时保持代码的可移植性。正确使用JNI,可以在不...
为了提升Java性能,有多种策略,如优化算法和设计模式、JIT(Just-In-Time)编译和动态优化技术。JIT技术在程序运行时将字节码编译为本地代码,从而提高执行效率,但可能增加存储空间的占用。动态优化技术则是在运行...
1. 性能优化:对于计算密集型或图形密集型的任务,使用JNI调用C/C++代码可以显著提高性能,因为本地代码执行速度通常快于Java虚拟机(JVM)。 2. 调用系统API:Android的某些系统级功能,如硬件加速、媒体编码解码...
7. **性能优化**:虽然JNI提供了与本地代码的直接交互,但频繁的Java到C/C++的上下文切换可能会带来性能开销。因此,应合理设计接口,尽量减少切换次数,并对性能敏感的代码进行优化。 8. **调试与测试**:调试JNI...
4. 动态配置:可能支持动态调整HAL参数,以适应不同应用场景的需求,如电源管理、性能优化等。 在Android13中,APP通过JNI与HAL的交互流程可能会变得更加顺畅,这不仅提升了用户体验,还为开发者提供了更强大的工具...
8. **性能优化**:由于JNI涉及跨语言调用,性能是开发者关注的重点。书中可能包含一些最佳实践,如减少本地方法的调用次数,缓存`JNIEnv`指针,以及合理使用局部引用。 9. **案例分析**:为了巩固理论知识,书中...
综上所述,“android jni 屏幕截图 NativeScreenCapture”项目涵盖了Android开发中的JNI编程、图像处理、权限管理和性能优化等多个关键知识点,对于深入理解和实践Android底层操作具有很高的学习价值。
此外,JNI还可以与调用API结合使用,允许本地应用程序嵌入到JVM中,从而使现有应用程序轻松支持Java,无需直接链接到虚拟机的源代码。 ### JNI的历史背景 早期,不同的JVM供应商各自提供了不同的本地方法接口,...
5. **JNI的设计原则**:除了提供实际的操作指南外,本书还探讨了JNI的设计理念,这对于理解其工作原理及优化使用至关重要。 6. **JNI的规范性**:作为Java平台的一部分,JNI有着严格的规范来确保跨平台的一致性,这...
- 性能优化:大量使用JNI可能导致性能下降,因为每次Java和本地代码间的调用都有一定的开销。合理设计接口,减少不必要的跨层调用。 - 跨平台兼容性:不同操作系统和处理器架构可能需要不同的本地库,因此在发布...