`

JNI 程序设计与性能优化

阅读更多

1、基本概念
    JNI是Java Native Interface(Java本地接口)的缩写。所谓本地接口,是相对运行在Java虚拟机“沙箱”中的Java程序而言的,指直接运行在操作系统之上,与操作系统直接交互的程序。
    JNI技术架构
     可以形象直观地把JNI看做是Java和本地应用程序的黏合剂。
         JNI框架
    缺点: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
分享到:
评论

相关推荐

    Java优化编程(第2版)

    第5章 jni程序设计与性能优化 5.1 jni技术架构 5.2 创建带有本地方法的java应用 5.3 创建c端代码 5.3.1 创建c端代码头文件 5.3.2 创建c端代码主文件 5.4 jni技术中数据类型与处理方法 5.4.1 jni技术中的本地数据类型...

    【文献综述】基于JAVA的俄罗斯方块游戏设计与实现.pdf

    电脑游戏软件的出现使计算机应用的世界更加绚丽多彩,然而游 戏开发领域因涉及程序设计、图形图像、动画、音频等多方面技术而长期以来使很多电脑爱 好者望而却步,更不适合一般的院校课堂教学。经典的俄罗斯方块游戏却...

    AndroidAll:Android程序员需要掌握的技术栈:数据结构算法,程序架构,设计模式,性能优化,插件化,热更新,Kotlin,NDK,Jetpack,以及常用的开源框架源码分析如Flutter,Router,RxJava, Glide,LeakCanary,Dagger2,Retrofit,OkHttp,ButterKnife等

    内容涵盖绝大部分Android程序员需要的技能:「数据结构算法」「程序架构」「设计模式」「性能优化」「组件化」「插件化」「热修复」「 NDK技术」「自定义检视」「性能优化」「 Android原始分析」「深入理解Kotlin 」...

    《Android应用开发揭秘》附带光盘代码.

     第3章 Android程序设计基础  3.1 Android程序框架  3.1.1 Android项目目录结构  3.1.2 Android应用解析  3.2 Android的生命周期  3.3 Android程序U设计  3.4 小结  第4章 用户界面开发  4.1 用户界面开发...

    《Android应用开发揭秘》源码

     第3章 Android程序设计基础  3.1 Android程序框架  3.1.1 Android项目目录结构  3.1.2 Android应用解析  3.2 Android的生命周期  3.3 Android程序U设计  3.4 小结  第4章 用户界面开发  4.1 用户界面开发...

    Android应用开发揭秘pdf高清版

    第3章 Android程序设计基础 3.1 Android程序框架 3.1.1 Android项目目录结构 3.1.2 Android应用解析 3.2 Android的生命周期 3.3 Android程序U设计 3.4 小结 第4章 用户界面开发 4.1 用户界面开发详解 4.1.1 用户...

    tomcat6、7、8、9, maven3.5

    性能优化和减少的垃圾收集 重构的应用程序部署器,具有可选的独立部署器,允许在Web应用程序投入生产之前进行验证和编译 使用JMX和管理器Web应用程序完成服务器监视 可扩展性和可靠性增强 改进了Taglibs的处理,包括...

    深入理解Android:卷I--详细书签版

    phone设计优化的问题;第10章分析了多媒体系统中mediascanner的工作原理。  本书适合有一定基础的android应用开发工程师和系统工程师阅读。通过对本书的学习,大家将能更深刻地理解android系统,从而自如应对实际...

    Android 4游戏编程入门经典

     7.12 性能优化  7.12.1 测量帧率  7.12.2 android 1.5平台下hero的奇特案例  7.12.3 使opengl es渲染如此慢的原因  7.12.4 移除不必要的状态改变  7.12.5 减小纹理大小意味着需要获取更少的像素  7.12.6 ...

    android游戏编程入门

     7.12 性能优化 273  7.12.1 测量帧率 273  7.12.2 Android 1.5平台下Hero的  奇特案例 275  7.12.3 使OpenGL ES渲染如此  慢的原因 275  7.12.4 移除不必要的状态  改变 276  7.12.5 减小纹理大小意味着...

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    新版Android开发教程.rar

    � A ndroid 在设计初期就考虑了与现其有业务的融合,改变以往从计算机为主改成从手机使用为导向。新 生应用如:G oogle 地图及其衍生应用、 GMail 、 GTalk 等。 � GPS 卫星导航功能,手机照相, MP3 ,蓝芽等均...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

Global site tag (gtag.js) - Google Analytics