深入学习JNI之前,介绍一个比较好的学习文档:jni详细教程。我这里只是一个Demo测试性能,至于入门教程请看我前一篇博文。

Demo展示

这个Demo用于从小到大的冒泡排序,App.java代码:

package net.oseye.JniDemo;

public class App

{

public static void main( String[] args )

{

int[] nums={2,6,9,18,5,7};

Sort sort=new Sort();

//调用native方法

int[] res=sort.bubble(nums,nums.length);

for(int i:res){

System.out.print(i+"\t");

}

}

}

class Sort{

static{

System.loadLibrary("sort");

}

/*

* 声明native方法

*/

public native int[] bubble(int[] nums,int len);

}

c++代码:

#include

#include "net_oseye_JniDemo_Sort.h"

JNIEXPORT jintArray JNICALL Java_net_oseye_JniDemo_Sort_bubble

(JNIEnv *env, jobject obj, jintArray arr, jint n)

{

jintArray iarr = (*env)->NewIntArray(env, n);

jint num[n];

(*env)->GetIntArrayRegion(env, arr, 0, n, num);

int i, j;

for(i = 0; i < n; i++)

{

for(j = 0; i + j < n - 1; j++)

{

if(num[j] > num[j + 1])

{

int temp = num[j];

num[j] = num[j + 1];

num[j + 1] = temp;

}

}

}

(*env)->SetIntArrayRegion(env, iarr, 0, n, num);

(*env)->ReleaseIntArrayElements(env, arr, num, 0);

return iarr;

}

执行输出:

2 5 6 7 9 18

Java和c/c++数据类型转换是一个学习重点,还有关于内存分配与释放以及异常抛出等,参考官方文档。

性能测试

成功执行上面的Demo,你一定信心满满,以后可以把Java和C/C++结合来用,Java的便捷+C/C++高性能,但下面的测试会让你非常有挫折感。

我添加一个Java方法:jbubble也用于从小到大的冒泡排序,App.java代码:

package net.oseye.JniDemo;

public class App

{

public static void main( String[] args )

{

//初始化数组

int len=10000;

int[] nums=new int[len];

for(int i=0;i

nums[i]=(int) Math.round(Math.random() * len);

}

Sort sort=new Sort();

//调用native方法

long start=System.currentTimeMillis();

sort.bubble(nums,nums.length);

System.out.println("c cost time:"+(System.currentTimeMillis()-start));

start=System.currentTimeMillis();

sort.jbubble(nums,nums.length);

System.out.println("j cost time:"+(System.currentTimeMillis()-start));

}

}

class Sort{

static{

System.loadLibrary("sort");

}

/*

* 声明native方法

*/

public native int[] bubble(int[] nums,int len);

/**

* java sort

* @param nums

* @param len

* @return

*/

public int[] jbubble(int[] nums,int len){

int i, j;

for(i = 0; i < len; i++)

{

for(j = 0; i + j < len - 1; j++)

{

if(nums[j] > nums[j + 1])

{

int temp = nums[j];

nums[j] = nums[j + 1];

nums[j + 1] = temp;

}

}

}

return nums;

}

}

执行输出:

c cost time:453

j cost time:125

是不是吓你一跳,好不容易把Java和c/c++结合了,却给了这个结果:结合了C/C++比原生的JAVA慢了3倍左右,严重被挫折了!!!

由于目前对C/C++操作不熟练,不方便实验,但从网上查的别人总结大致:不管是java/native还是native/java都比java/java慢,主要是把时间消耗在调用过程转换上了,在把控制权和入口切换给本地方法之前,VM必须做一些额外的操作来创建参数和栈帧。

有兴趣的童鞋可以自己尝试下,看看时间到底去哪儿了?

我本来也想试试的,但c++在windows下获取当前时间的毫秒数我弄的总是不对,如:

#include

#include

long getCurrentTime()

{

struct timeval tv;

gettimeofday(&tv,NULL);

long res= tv.tv_sec * 1000 + tv.tv_usec / 1000;

return res;

}

int main()

{

printf("%ld\n",getCurrentTime());

return 0;

}

这个在linux下是OK的,但在windows下总是不对,这难道就是体现了平台差异?! 暂时放弃实验,放弃JNI。

c 与java性能测试_JNI只C性能测试相关推荐

  1. 在java中使用JMH(Java Microbenchmark Harness)做性能测试

    文章目录 使用JMH做性能测试 BenchmarkMode Fork和Warmup State和Scope 在java中使用JMH(Java Microbenchmark Harness)做性能测试 ...

  2. 细说Java性能测试第三课 性能测试详解2

    如何制定一份有效的性能测试方案? 上一讲我们学习了性能测试的场景,并且明确了每个场景的核心意义,这一讲我将带你学习如何做好一份性能测试方案,相信你对测试方案这个概念并不陌生,那如何做好一份性能测试方案 ...

  3. java异步刷新集合,同步和异步集合的性能测试,异步集合性能测试,package cn.o

    同步和异步集合的性能测试,异步集合性能测试,package cn.opackage cn.outofmemory.snippets.core;import java.util.ArrayList;im ...

  4. Java性能优化四、性能测试工具

    文章目录 推荐几款常用的性能测试工具 1.ab 2.JMeter 3.LoadRunner 总结 推荐几款常用的性能测试工具 常用的性能测试工具有很多,在这里我将列举几个比较实用的. 对于开发人员来说 ...

  5. 性能测试 性能测试实战(八)Jmeter性能测试平台开发,性能测试平台架构解析 ,性能测试平台搭建 分布式性能压测平台 Jmeter分布式性能测试管理平台 性能测试平台示例案例 《完结篇》

    文章目录 一.前言 二.Jmeter分布式性能测试平台 介绍 1.Jmter分布式性能测试平台 简介 2.Jmeter分布式性能测试平台 优秀案例1 3.Jmeter分布式性能测试平台 优秀案例2 4 ...

  6. 性能测试工具Loadrunner以及性能测试的流程以及每一个步骤的流程和结果分析

    [文章末尾给大家留下了大量的福利] 性能测试工具Loadrunner Loadrunner是HP公司研发的性能测试工具,原理是通过刻录传输协议生成脚本,增强脚本以后模拟大量用户并发进行性能测试. 对于 ...

  7. 【2023最详细】性能测试重点和各项性能测试流程

    前言 一.Python编程入门到精通 二.接口自动化项目实战 三.Web自动化项目实战 四.App自动化项目实战 五.一线大厂简历 六.测试开发DevOps体系 七.常用自动化测试工具 八.JMete ...

  8. 性能测试怎么做?性能测试重点和各项性能测试流程(超级详细)

    目录:导读 前言 一.Python编程入门到精通 二.接口自动化项目实战 三.Web自动化项目实战 四.App自动化项目实战 五.一线大厂简历 六.测试开发DevOps体系 七.常用自动化测试工具 八 ...

  9. 服务器性能测试工具及实战,性能测试实战--《软件测试52讲》

    1.性能测试工具常见5组件及作用: 模拟用户行为生成脚本:loadrunner有录制功能,转化为基于协议的请求.jmeter有badboy 压力产生器:可能由于压力产生器本身的性能瓶颈(设备本身也会存 ...

最新文章

  1. linux系统硬盘坏道,如何在 Linux 系统下检测硬盘上的坏道和坏块
  2. 命令行修改weblogic用户名和密码
  3. JavaScript中赋值运算符的使用
  4. 使用jqprint插件完成页面打印
  5. H - Great Cells Gym - 101194H(数学推导/思维)
  6. 目前个人计算机使用的电子电路主要是,计算机基础知识理论题库.xls
  7. Web Service 学习
  8. 【转】Django 数据库的操作
  9. python 学习DAY12
  10. 可用性测试(用户体验)测试
  11. JavaScript 运算符
  12. 第5章 初识SqlSugarCore之内置逻辑分页
  13. 关于Android开发中图片的三级缓存机制
  14. 不要小看90后,图片贴纸应用“贴纸”上线17天登大陆摄影与录像类App第3位,下载破15万
  15. ply补全为立方体_PLY文件格式及其解析 | 学步园
  16. 结构化软件设计的具体步骤
  17. 微信小程序-购物车数字加减
  18. 函数、原生JS的事件相关(上)
  19. aiwi体感游戏,感受聊斋风情
  20. edge for android 6.0,Microsoft Edge for Android v44

热门文章

  1. (一)Redis初学教程之安装篇
  2. JAVA共通関数--システム時刻を取得する(1)
  3. Python 2.7 系统模块学习(1) Built-in 函数
  4. 【转】离婚男人给女孩的恋爱忠告
  5. HDU2001 计算两点间的距离【入门】
  6. HDU2084 数塔【DP】
  7. HYSBZ2761 不重复数字【序列处理】(BZOJ2761)
  8. Go语言结构应用实例
  9. 除法运算、商、余数与取模
  10. 使用 matlab 数字图像处理(五)—— 双线性插值(Bilinear Interpolation)