为什么C++通过JNI调用JAVA类函数速度慢近十倍?

问题描述

很不解,多谢了。实在对不住,积分所剩不多。 问题补充:兄台误会我意思了,主要我没说清楚。我是指Java类中的某个函数的执行时间在C++中通过JNI方式调用执行要比通过Java传统方式执行要慢很多。wkfighting 写道

解决方案

建议你在论坛问问他RednaxelaFX
解决方案二:
将java类中的方法执行两次,估计第二次时间就正常了。我猜测是Java类的延迟装载造成第一次调用慢了,你可以试试看,不知道我猜测的对不对?
解决方案三:
你是什么样的代码呢?能再说具体一点吗?JVM本身也有优化的啊
解决方案四:
他说的是c++来调用java的类方法慢才正常啊,java的类都是基于jvm的,首先要有jvm,才能去调用java方法而jvm又基于操作系统他们就这样绕啊绕的,肯定慢了
解决方案五:
LZ,你的代码是什么样的呢?你的意思是不是说相同的代码,用Java写和用C++写,但是Java运行的效率要高于Java调用C++??
解决方案六:
理论上用native方法比普通的Java方法运行效率要高一些。Java程序的运行时通过虚拟机来进行的,虽说提供了可移植性,但运行效率也比直接的可执行文件要低,因为多了很多不必要的中间过程。JNI是直接调用由C或C++生成的动态函数库,所以执行起来要快很多。

时间: 2024-10-23 12:30:22

为什么C++通过JNI调用JAVA类函数速度慢近十倍?的相关文章

jni调用java方法报错!!!

问题描述 jni调用java方法报错!!! 12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] JNI DETECTED ERROR IN APPLICATION: calling static method java.lang.String com.library.utils.MD5Utils.md5(java.lang.String) with CallObjectMethod 12-04 11:33:08.818:

anroid jni回调java函数问题

问题描述 anroid jni回调java函数问题 JAVA 代码 1.NativeProviefder.java package com.example.test; public class NativeProviefder { static { System.loadLibrary("test_jni"); } public native void nativeInitilize(); public native void start(); public native void s

《Android的设计与实现:卷I》——第2章 2.5 JNI操作Java对象

2.5 JNI操作Java对象 JNI提供了Java和C/C++方法互操作的机制,上节只介绍了如何在Java中调用JNI实现方法,那JNI又是如何操作Java层呢?JNI方法接受的第二个参数是Java对象:jobject,可以在JNI中操作这个jobject进而操作Java对象提供的变量和方法. 2.5.1 访问Java对象 要操作jobject,就是要访问这个对象并操作它的变量和方法.JNI提供的类和对象操作函数有很多,常用的有两个:FindClass和GetObjectClass,在C和C+

Java通过JNI调用C语言的方法

JAVA以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能. 解决JAVA对本地操作的一种方法就是JNI. JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式).通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各接口方法. 简单介绍及应用如下: 一.JAVA中所需要做的工作 在JAVA程序中,首先需要在类中声明所调

Java通过JNI调用C++程序

JNI是Java Native Interface的缩写,中文为JAVA本地调用.使用JNI可以很方便的用我们的Java程序调用C/C++程序.很多时候,某些功能用Java无法 实现,比如说涉及到底层驱动的一些功能,这时候我们就可以利用JNI来调用C或者C++程序来实现,这就是JNI的强大之处.但是JNI也有它的缺点,使 用java与本地已编译的代码交互,通常会丧失平台可移植性. 下面是一个JNI例子,调用C++输出"hello world":   第一步:创建Java类,在里面定义一

jni使用基础(九)之c调用java事例demo

      1.Activity package com.devchina.ndk4; import android.app.Activity; import android.os.Bundle; import android.view.View; public class DevchinaActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(s

c语言-c通过jni调用 HBASE JAVA API

问题描述 c通过jni调用 HBASE JAVA API jvm.dll!6db71017() 未知[下面的框架可能不正确和/或缺失,没有为 jvm.dll 加载符号] jvm.dll!6db71086() 未知jvm.dll!6db710e0() 未知jvm.dll!6dde9d1d() 未知jvm.dll!6deaa65d() 未知jvm.dll!6ddfd291() 未知jvm.dll!6dd07d3d() 未知jvm.dll!6dd11511() 未知022003e4() 未知jvm.d

jni使用基础(八)之jni使用流程及C调用java简单说明

  jni使用步骤: 1.定义好native接口. 2.使用javah工具,生成头文件. 3.根据头文件,创建c文件. 4.编写Android.mk文件. 5.通过cygwin,进入到该工程目录,通过ndk-buld命令,编译c文件,生成so库文件 6.即可完成调用     怎样在c中调用java? 也就是要在c代码中,new出java对象,然后再调用java对象中的方法即可. 要创建java对象,就要找到java类,相当于找到类的class文件,使用jni中的 FindClass去找到相应的类

【IOS-COCOS2D-X 游戏开发之十三】详细讲解在XCODE中利用预编译并通过JNI调用ANDROID的JAVA层代码(COCOS2DX里访问调用ANDROID函数)!

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/725.html 很多看过之前Himi的[iOS-cocos2d-X 游戏开发之七]整合Cocos2dX的Android项目到Xcode项目中,Xcode编写&编译代码,Android导入打包运行即可! 博文的童鞋都在问我如何在Xcode中能调用Java的函数,比如在Android端需要加入广告.支付.等第三方平台或者