当前位置: 首页 > news >正文

宜春企业网站的建设/企业培训内容

宜春企业网站的建设,企业培训内容,网站设计的目标是什么,免费的国外代理ipJNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C而设计的&…

JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。

使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况这样做是可以接受的,甚至是必须的。例如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少保证本地代码能工作在任何Java虚拟机实现下。

标准的java类库可能不支持你的程序所需的特性。或许你已经有了一个用其他语言写成的库或程序,而你希望在java程序中使用它。

你可能需要用底层语言实现一个小型的时间敏感代码,比如汇编,然后在你的java程序中调用这些功能。

以下是具体步骤:

编写带有native声明的方法的java类

·使用javac命令编译所编写的java类,然后使用javah + java类名生成扩展名为h的头文件

·使用C/C++实现本地方法

·将C/C++编写的文件生成动态连接库

·完成

示例:

HelloWorld.java:

package com.magc.jni;

public class HelloWorld {

static {

System.loadLibrary("Hello");

}

public     native void DisplayHello();

/**

* @param args

*/

public static void main(String[] args) {

new HelloWorld().DisplayHello();

}

}

进入src目录下,编译该JAVA类,

命令:javac ./com/magc/jni/HelloWorld.java

在该HelloWorld.java所在目录下生成HelloWorld.class

然后使用javah生成头文件,

命令:javah -jni com.magc.jni.HelloWorld

在当前目录下生成com_magc_jni_HelloWorld.h头文件,此文件供C、C++程序来引用并实现其中的函数

HelloWorld.h:

/* DO NOT EDIT THIS FILE - it is machine generated */

#include

/* Header for class com_magc_jni_HelloWorld */

#ifndef _Included_com_magc_jni_HelloWorld

#define _Included_com_magc_jni_HelloWorld

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class:     com_magc_jni_HelloWorld

* Method:    DisplayHello

* Signature: ()V

*/

JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello

(JNIEnv *, jobject);

#ifdef __cplusplus

}

#endif

#endif

注:1)、此头文件是不需要用户编译的,直接供其它C、C++程序引用。

2)、此头文件中的Java_com_magc_jni_HelloWorld_DisplayHello(JNIEnv*, jobject)方法,是将来与动态链接库交互的接口,并需要名字保持一致。

jni_helloworldImpl.cpp:

#include

#include "com_magc_jni_HelloWorld.h"

#include

JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello

(JNIEnv *env, jobject obj)

{

printf("From jni_helloworldImpl.cpp :");

printf("Hello world ! \n");

return;

}

此C++文件实现了上述头文件中的函数,注意方法函数名要保持一致。

编译生成动态库libHello.so,

11d04c94cf4b537782de4d3a9c2e9d00.png

4458d15f9fcfadda17686718bbd31085.png

应用场景

总结了一下,jni一般有以下一些应用场景

1.高性能 ,在一些情况下因为处理运算量非常大,为了获取高性能,直接使用java是不能胜任的,如:一些图形的处理

2.调用一些硬件的驱动或者一些软件的驱动,比如调用一些外部系统接口的驱动,如:读卡器的驱动,OCI驱动

3.需要使用大内存,远远超过jvm所能分配的内存,如:进程内Cache

4.调用C或者操作系统提供的服务,如:java调用搜索服务,其中搜索是由C/C++实现的,不过这个一般可以设计成更加通用的方式,比如soa的方式

所有这些场景的前提是牺牲了java代码的可移植性,不同的os,甚至版本都需要写不同版本的native实现

经测试jni实现方法比普通java方法快13~15倍。

如有问题请留言,转载注明出处。

http://www.jmfq.cn/news/5012677.html

相关文章:

  • 做二手房比较好的网站/如何在百度上发布自己的广告
  • 原创文学网站建设/福州seo公司排名
  • 做视频网站代码/抚顺网站建设
  • 中山好的网站建设公司哪家好/友情链接翻译
  • 网站制作报价多少/seo交流博客
  • 网页小游戏网站建设/上海十大营销策划公司排名
  • 台州制作网站软件/个人网站制作模板
  • 做网站可以赚钱吗/福州seo排名优化
  • 山东临沂网站开发/亚马逊排名seo
  • 做微信请帖网站/企业网站大全
  • 杭州做企业网站的公司/seo教学培训
  • php网站建设与维护/上海网站推广系统
  • 网站非法篡改/seo搜索引擎优化业务
  • 广州网站制作功能/永久免费google搜索引擎
  • 网站开发费用明细/网络营销广告
  • 昌乐网站制作/北京seo优化排名
  • 战鼓的h5网站如何做/阿拉善盟seo
  • 网站备案后怎么做/青柠影院免费观看电视剧高清
  • 做网站手机电脑通用要加些什么/东莞网站建设推广公司
  • 媒体资源/上海站群优化公司
  • 使用dw做门户网站/武汉java培训机构排名榜
  • 网站建设的可用性/建设网站流程
  • 网站后台界面/免费网站推广网站在线
  • 织梦网站有会员系统怎么做/南宁优化推广服务
  • wordpress用户量上限/seo计费系统源码
  • 唐山网站建设培训/百度首页优化排名
  • 万国手表网站/河南网站推广
  • 湖南省建设厅网站/哈尔滨seo关键字优化
  • 二次开发语言/网站推广优化方案
  • 我想建立一个网站不知道怎么做啊/搜索引擎优化教程