Tag: jni

从JNI函数传回一个数组而不复制它

我正在尝试使用JNI使用C ++处理大块数据但是我无法理解天气,函数SetArrayRegion将按元素复制数组元素,或者它是否可以将数据留在原位并将其返回到调用java函数。 以下文档是我一直在阅读的内容,但目前仍不清楚发生了什么。 http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html 感谢您的帮助。

JNI – UnsatisfiedLinkError – loadLibrary总是失败

我试图让一个简单的JNI示例工作,但无论我做什么,我都无法使用loadLibrary命令使其工作。 如果我指定.so文件的绝对路径并使用System.load而不是System.loadLibrary,它将完美地工作。 这是我的目录树: . |– – |– TranslatorWrapper.c |– TranslatorWrapper.class |– TranslatorWrapper.cpp |– TranslatorWrapper.h |– TranslatorWrapper.java `– libTranslatorWrapper.so 这是Java代码: public class TranslatorWrapper { public native String translate(byte[] bytes); public static void main(String[] args) { TranslatorWrapper w = new TranslatorWrapper(); System.out.println(“From JNI: ” + w.translate(null)); } static { System.out.println(“Attempting to load library from ” + System.getProperty(“java.library.path”)); […]

是否可以让GC管理本机对象的生命周期?

凭借C ++和C#经验以及一些小知识,我现在正在开始一个Java + JNI(C ++)项目(Android,如果这很重要)。 我有一个本机方法,它创建一些C ++类并返回一个指向它的指针作为Java long值(比如句柄)。 然后使用Java代码调用其他本机方法,使用句柄作为参数在此类上执行一些本机操作。 C ++方面不拥有该对象,它是Java方面的人。 但是在当前的架构设计中,很难定义谁拥有对象以及何时删除它。 因此,使Java VM垃圾收集器以某种方式管理对象的生命周期可能会很好。 C ++类不消耗任何资源,除了一些内存,不是很大。 所以没关系,如果几个这样的对象不会被破坏。 在C#中,我可能会在一些托管包装类中包装本机IntPtr句柄。 并且当托管包装器被垃圾收集时,覆盖它的终结器来调用本机对象的析构函数。 SafeHandle,AddMemoryPressure等也可能对此有所帮助。 这是与Java最终确定的不同的故事。 你在Java中的’Hello world’之后知道的第二件事是使用finalize是不好的。 有没有其他方法可以在Java中实现这一目标? 也许使用PhantomReference?

如何使用Javah工具创建C头文件

嗨伙计们我正在使用android ndk而且我正在尝试使用javah工具创建ac头文件如何使用以及在哪里使用此工具我无法理解所以请任何人都可以告诉我程序如何做到这一点我是等待回复请………

任何人都可以将这个C ++代码(从OpenJDK6)解释为普通英语吗?

这是OpenJDK6的hotspot/src/share/vm/prims/unsafe.cpp的代码片段(从第1082行开始): // JSR166 —————————————————————— UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSwapObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject e_h, jobject x_h)) UnsafeWrapper(“Unsafe_CompareAndSwapObject”); oop x = JNIHandles::resolve(x_h); oop e = JNIHandles::resolve(e_h); oop p = JNIHandles::resolve(obj); HeapWord* addr = (HeapWord *)index_oop_from_field_offset_long(p, offset); if (UseCompressedOops) { update_barrier_set_pre((narrowOop*)addr, e); } else { update_barrier_set_pre((oop*)addr, e); } oop res = oopDesc::atomic_compare_exchange_oop(x, addr, e); jboolean success […]

JVM上的所有“Magic”方法都标记为Native吗?

“魔术”是指具有不用纯Java表达的语义的方法。 我知道所有native方法都很神奇,因为它们的实现是由底层运行时提供的,而不是由Java字节码提供的。 反之亦然吗? 所有魔法方法都是native ,还是有一些神奇的方法显然是用纯Java实现的,但是有一些JVM特殊shell的额外帮助? 用例是我想通过检测其字节码来修改Java的语义。 所有这些神奇的方法都是特殊情况,我将不得不以某种方式处理。 native的都很明显,但我想知道是否有任何无标记的魔术方法我需要注意和特殊情况。

使用java.nio在内存中写入文件?

使用nio,可以将现有文件映射到内存中。 但是有可能只在内存中创建它而没有硬盘上的文件吗? 我想模仿CreateFileMapping窗口函数,它允许你在内存中写入。 Java中是否有等效的系统? 目标是在内存中写入以便另一个程序(c)读取它。

在java中访问dll方法

我正在尝试访问用c#编写的java中的dll方法。 从下面的代码我试图建立成功生成的DLL。 using System; using Microsoft.Win32; namespace CyberoamWinHelper { public class RegistryAccess { public static String getValue(String key) { RegistryKey rk = Registry.CurrentUser; RegistryKey rk1=rk.OpenSubKey(“Software\\Test”, RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl); rk1.SetValue(key, “val1”); return rk1.GetValue(key).ToString(); } public static void createSubkey(String name) { RegistryKey rk = Registry.CurrentUser; rk.CreateSubKey(“Software\\Test”); } } } 在此之后我在我的java程序代码中加载生成的dll,如下所示 public class JNI { /** * @param args […]

将jdouble转换为c类型的double

如何将java类型变量的jdouble转换为c类型的double变量?

exception访问违规Java?

我正在编写一个JNI项目,我在尝试运行Java代码时遇到以下错误日志。 它告诉我有问题的框架是一个jvm.dll,并试图隔离问题,我试图找出我的问题究竟在哪里(在JVM与我的本机代码)我附加了线程日志部分,如果需要可以附加其余部分。 我也尝试重新安装JVM。 Java运行时环境检测到致命错误: pc = 0x6d8fefb5的EXCEPTION_ACCESS_VIOLATION(0xc0000005),pid = 720,tid = 3128 JRE版本:6.0_21-b07 Java VM:Java HotSpot(TM)客户端VM(17.0-b17混合模式,共享windows-x86)有问题的框架:V [jvm.dll + 0xfefb5] —————线程————— 当前线程(0x02189000):JavaThread“main”[_thread_in_vm,id = 3128,stack(0x02120000,0x02170000)] siginfo:ExceptionCode = 0xc0000005,读取地址0x00000000 寄存器:EAX = 0x00000000,EBX = 0x02189118,ECX = 0x02189000,EDX = 0x6da2f76c ESP = 0x0216fa84,EBP = 0x0216facc,ESI = 0x02189000,EDI = 0x00000000 EIP = 0x6d8fefb5,EFLAGS = 0x00010246 堆栈顶部:(sp = 0x0216fa84)0x0216fa84:0216fb38 0216fae4 34497370 0216faa0 0x0216fa94: […]