草庐IT

hello-jni

全部标签

Android Java代码与JNI交互 JNI方法Java类字段 (六)

🔥AndroidStudio版本🔥   🔥Java基础类型数据对应Native层的字母🔥 通过jni查找java某个类中相应字段对应的数据类型,需要使用到jni中的GetFieldID()函数jfieldIDGetFieldID(jclassclazz,constchar*name,constchar*sig){returnfunctions->GetFieldID(this,clazz,name,sig);}*|Java|JNI|*|boolean|Z|*|byte|B|*|char|C|*|short|S|*|int|I|*|long|J|*|float|F|*|double|D|🔥Jav

java - 通过jni将jint数组从c返回到java

我在java中创建了一个整数数组,并通过jni将数组传递给cpp程序我的代码是:importjava.util.*;classSendArray{//Nativemethoddeclarationnativeint[]loadFile(int[]name);//Loadthelibrarystatic{System.loadLibrary("nativelib");}publicstaticvoidmain(Stringargs[]){intarr[]={1,2,3,4,5,6,7,8,9,10};//CreateclassinstanceSendArraymappedFile=new

java - 为什么 "hello\\s*world"与 "hello world"不匹配?

为什么这段代码抛出InputMismatchException?Scannerscanner=newScanner("helloworld");System.out.println(scanner.next("hello\\s*world"));相同的正则表达式在http://regexpal.com/中匹配(用\s而不是\\s) 最佳答案 与匹配器相反,扫描器内置了字符串的标记化,默认分隔符是空格。所以你的“helloworld”在比赛开始之前被标记化为“hello”“world”。如果您在扫描到不在字符串中的内容之前更改了分隔符

java - 从 JNI/NDK 将二维原始数组从 C 返回到 Java

我找到了大量关于如何在JNI中生成二维基元数组并将其返回给Java的文档。但是这些信息无法描述如何在C中给定上下文传递一个已经存在的2Dfloat组(float**)。为了明确描述我的问题,我将添加一些我想要实现的C伪代码://Returnsa2DfloatarrayfromCtoJavajfloatArrayndk_test_getMy2DArray(JNIEnv*env,jobjectthiz,jlongcontext){//CastmycontextreferenceMyContextRefcontextRef=(MyContextRef)context;//Incasewene

java - 如何确定 JNI 全局引用内存泄漏的原因?

我正在使用Tomcat,在停止我的Web应用程序后,仍然存在对我的Web应用程序的类加载器实例的引用。结果是大量内存(主要与静态数据相关)不会被释放。这迟早会导致OutOfMemoryError。我做了一个heapdump,然后我意识到它由一个JNIglobalreference持有防止类加载器将是garbagecollected.我的应用程序不使用JNI。我也没有使用ApacheTomcatNativeLibrary。我正在使用Sun/OracleJDK。我想追查这个全局引用的原因/来源。(我的猜测是JVM内部引用了类加载器-但为什么/在哪里?)。问题:有哪些方法/工具集可以实现这一

java - 使用相对路径名从不同目录加载 JNI 库的可移植语句?

是否有独立于平台的Java语句从不同于Java源代码所在的目录加载native库?我想使用这样的东西:publicclassHelloWorld{static{System.loadLibrary("../some_project/HelloWorld");}publicstaticnativevoidprint();}问题是System.loadLibrary()不支持路径名参数中的目录分隔符。另外,不幸的是,System.load()需要一个绝对路径名,这不仅意味着我不能像上面那样指定一个相对目录(我想这样做),而且还需要参数包含,例如,前面的Linux系统上JNI库名称的“lib

java - Eclipse:无法加载 JNI 共享库“C:\Program Files(x86)\Java\jdk1.7.0_15\bin\..\jre\bin\client\jvm.dll

我正在尝试安装Eclipse。为了安装,我已经完成了以下操作。在C:​​\ProgramFiles(x86)\Java\JDK1.7.0_15安装JDK7u1564位(实际下载名称:jdk-7u15-windows-i586.exe)我在管理员中运行cmd并键入“C:\Users\Alfred>java-version”,这给了我“Java版本“1.7.0_15”java(TM)SE运行时环境(build1.7.0_15-b03)JavaHotspot(TM)ClientVM(build23.7-b01,混合模式,共享)在同一个cmd窗口中,我输入了“C:\Users\Alfred>j

java - 为什么我的 Oracle JVM 会为一个简单的 'Hello World' 程序创建所有这些对象?

我在玩弄jmap,发现简单的“HelloWorld”Java程序创建了数千个对象。以下是OracleJVMupdate131在启动时创建的对象的截断列表:num#instances#bytesclassname----------------------------------------------1:4024903520[I2:1621158344[C3:45552056java.lang.Class4:19449728[B5:126330312java.lang.String6:51526088[Ljava.lang.Object;7:1158280java.lang.refle

java - 分析通过 JNI 调用运行的 Java

我有一个C++代码,在执行时:加载JVM(我完全控制如何加载JVM),并使用CJNI代码调用Java方法(从加载的类)。Java代码没有Main(),它实际上不是标准的Java应用程序。主要是编译压缩成Jar文件的静态代码,由C++模块调用。是否可以分析由YourKit执行的Java代码(有许可证)?如果是这样,我会很高兴知道如何做。 最佳答案 我会把它丢给希望分析Java的C++人员:Java有一个很棒的可视化分析器,它可以自动连接到称为VisualVM的JVM。它包含在jdk中。在这里查看:http://visualvm.jav

java - 处理 JNI 崩溃

我有一个包含遗留C代码的dll,我通过JNI调用这个dll,但有时C代码崩溃并导致JVM终止。有没有办法避免JVM崩溃?我可以处理JNI故障并让JVM存活吗?:) 最佳答案 正如Timo所说,您别无选择,只能使JNI代码健壮。如果您不能这样做(例如,如果您没有源代码),那么也许您可以寻求进程间解决方案。将JNI代码放在一个单独的服务器进程中,进行RMI或HTTP调用。如果它崩溃了,请重新启动“服务器”,但主JVM仍然存在。显然会有性能开销和复杂性增加,但也许您可以负担得起? 关于java