草庐IT

JNI_ASSERT

全部标签

Java JNI 调用比预期慢(至少 2 毫秒/调用)

我从其他几份报告中读到,人们通常在4-80ns上花费一个普通的、基本的JNI调用:来自WhatmakesJNIcallsslow?Fortrivialnativemethods,lastyearIfoundcallstoaverage40nsonmyWindowsdesktop,and11nsonmyMacdesktop..来自PossibleincreaseofperformaceusingJNI?HoweverJNIcallsoftentakearound30ns..当我在我的JNI代码中调用简单方法时(简单的意思是不超过一个时间int返回类型int的参数),我得到的往返调用时间(

java - 是否可以通过 JNI 将静态库链接到 Java?

是否可以构建HelloWorld.lib并将其加载到使用JNI的Java应用程序中?或者它只适用于共享库?我在JNI文档中找不到明确的答案,没有提到“静态库”。 最佳答案 需要是动态库。幸运的是,您可以从静态库构建动态库。 关于java-是否可以通过JNI将静态库链接到Java?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/15433684/

java - 通过 JNI 将双字节 (WCHAR) 字符串从 C++ 传递到 Java

我有一个Java应用程序,它通过JNI使用C++DLL。DLL的一些方法采用字符串参数,其中一些方法返回也包含字符串的对象。目前DLL不支持Unicode,所以字符串处理比较简单:Java调用String.getBytes()并将生成的数组传递给DLL,DLL将数据简单地视为char*。DLL使用NewStringUTF()从constchar*创建jstring。我现在正在修改DLL以支持Unicode,切换到使用TCHAR类型(当定义UNICODE时使用Windows的WCHAR数据类型)。修改DLL进行得很顺利,但我不确定如何修改代码的JNI部分。我现在唯一能想到的是:Java调

java - 使用 long 将指针从 JNI 传递到 Java

我正在尝试将结构作为指针从JNI传递到Java,以便稍后能够将它从Java传递回JNI。我读过这个帖子:PassingpointersbetweenCandJavathroughJNI,但我没有成功。我有一个非常复杂的结构:structmyStruct_smyStruct;在Java中,我调用一个JNI函数来初始化结构并返回一个long(指向结构的指针):JNIEXPORTjlongJNICALLJava_example_ExampleJNI_getStruct(JNIEnv*jenv,jclassjcls){structmyStruct_smystruct;long*lp=(long

java - 为什么java中默认不启用assert

我的问题是从语言设计的角度。为什么assert的处理方式不同,即它引发错误而不是异常,默认情况下不启用等等。它看起来确实很优雅(非常主观的意见),易于阅读(再次主观)进行验证并且还有工具(IDE)可以对其进行实时评估并根据断言提供警告。 最佳答案 我想说的原因是Java的默认值适用于生产代码(软件的“发布”版本)——如果用户需要构建您的代码,他们将使用提供的默认值,如果您是开发人员并希望有更好的报告,你总是可以做出一些额外的努力。通常您不想在发布版本中发布断言。为什么?你总是可以设计你的代码来执行一些不打扰的后台错误处理并且在用户面

java - 在 Mac 上安装 rJava 时遇到问题; JNI 数据类型的问题

已解决!!请参阅下面我的解决方案,以防这个问题在未来对其他人有所帮助。错误如标题所述,它对我来说失败了。当我尝试从R内部安装install.packages('rJava')时,我收到的错误是(之前进行了一些良好的检查):checkingwhetherJNIprogramscanbecompiled...yescheckingJNIdatatypes...configure:error:OneormoreJNItypesdifferfromthecorrespondingnativetype.Youmayneedtousenon-standardcompilerflagsoradiff

java - JNI。如何从 jobject 获取 jstring 并将其转换为 char*

这是我目前所拥有的:我传递了一个具有2个字段的对象:String和Integer,作为参数我想发送信息在C部分进行处理,这在这一点上并不重要......我在jstring声明中收到投诉JNIEXPORTjintJNICALLJava_Tier3_NativeMethods_totalPalletsIn(JNIEnv*env,jclasscls,jobjectstat){jclassstaticsitcs=(*env)->GetObjectClass(env,stat);//HereItrytogetitusingtheIDjfieldIDidDate=(*env)->GetFieldI

Java JNI - 是否可以从 C++ 在 Java 中设置单个原始数组元素

基本上,我一直在执行以下操作来检索Java实例字段(在本例中为int)并将其设置为新值,如下所示:jclasscls=env->GetObjectClass(obj);jfieldIDfid=env->GetFieldID(cls,"myVariable","I");env->SetIntField(obj,fid,(jint)2012);但是,我想对javaint数组中的单个int元素执行此操作,这样:jclasscls=env->GetObjectClass(obj);jfieldIDfid=env->GetFieldID(cls,"myVariableArray","[I");P

java - 如何使用 JNI 实例化 Java 泛型?

如果我想实例化一个Date,我可以使用:jclasscls=(*env)->FindClass(env,"java/util/Date");jmethodIDctr=(*env)->GetMethodID(env,cls,"","()V");jobjectobj=(*env)->NewObject(env,cls,ctr);但是我如何实例化ArrayList? 最佳答案 同理。在VM级别,没有泛型。 关于java-如何使用JNI实例化Java泛型?,我们在StackOverflow上找到

java - JNI system.out 和 printf 行为

我正在编写一个程序,该程序使用JNI与一个简单的C程序进行交互。我创建了以下程序:publicstaticvoidmain(String[]args){Helloh=newHello();System.out.println("before");intnumber=h.sayHello();System.out.println(number);System.out.println("after");}和JNIEXPORTintJNICALLJava_Hello_sayHello(JNIEnv*env,jobjectobj){printf("HelloJNI\n");return10;}