Tag: native code

Android – Java Stack vs Native Stack

在Android中,当我使用adb shell dumpsys meminfo检查应用程序内存时,我观察到单独的Java和本机堆,但只有1个堆栈条目。 Pss Private Private Swapped Heap Heap Heap Total Dirty Clean Dirty Size Alloc Free —— —— —— —— —— —— —— Native Heap 4516 4480 0 1848 11520 7412 4107 Dalvik Heap 9726 9668 0 12924 33436 28477 4959 Dalvik Other 1417 1416 0 28 Stack 288 288 0 0 我想问一下,在Android中,当一个java类通过JNI使用本机代码时,是在java堆栈中连续内存位置分配的本机堆栈,还是它们是非连续的(实际上是两个独立的堆栈)? […]

Windows 64位上的com4j

我已经下载了最新的com4jjar子,我正试图通过他们最简单的例子。 我使用64位Windows 7并使用64位JVM。 当我运行命令时(来自com4j教程): java -jar tlbimp.jar -o wsh -p test.wsh %WINDIR%\system32\wshom.ocx 我明白了: Exception in thread “main” java.lang.UnsatisfiedLinkError: com4j-amd64.dll: %1 is not a valid Win32 application at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(Unknown Source) at java.lang.ClassLoader.loadLibrary(Unknown Source) at java.lang.Runtime.load0(Unknown Source) at java.lang.System.load(Unknown Source) at com4j.COM4J.loadNativeLibrary(COM4J.java:569) at com4j.COM4J.(COM4J.java:522) at com4j.tlbimp.driver.Lib.getLibid(Lib.java:90) at com4j.tlbimp.driver.Driver.addLib(Driver.java:38) at com4j.tlbimp.driver.Main.doMain(Main.java:123) at com4j.tlbimp.driver.Main.main(Main.java:56) Exception in […]

如何使用OSGi片段来提供具有相同文件名的依赖于平台的本机代码?

我正在使用JNotify项目来监听文件系统事件。 这取决于每个操作系统的一个本机库:处理器架构。 例如,有一个用于Windows x86的库,一个用于x86-64等的库。 整体捆绑 最初,我有一个包含JNotify Java类和本机代码的包。 本机代码在Bundle-NativeCode中声明如下: (我已经将这些格式化为bnd样式以获得更好的可读性……显然,实际的MANIFEST.MF文件已正确形成)。 Bundle-NativeCode: jnotify_64bit.dll;osname=Win32;osname=”Windows NT (unknown)”;osname = WindowsXP;osname = Windows2000;osname = Windows2003;osname = WindowsVista;osname = Windows7;osname = WindowsServer2008;osname= Windows8;osname = WindowsServer2012;processor = x86-64,\ jnotify.dll;osname=Win32;osname=”Windows NT (unknown)”;osname = WindowsXP;osname = Windows2000;osname = Windows2003;osname = WindowsVista;osname = Windows7;osname = WindowsServer2008;osname = Windows8;osname = WindowsServer2012;processor = x86,\ libjnotify.so;osname = Linux;processor = […]

是否可以使用sun.misc.Unsafe在没有JNI的情况下调用C函数?

一段C / C ++代码可以为JNI方法提供一个函数指针数组。 但是有没有办法直接从Java代码内部(不使用JNI或类似代码)调用数组指针指向的函数? JNI以某种方式做了类似的事情,所以必须有办法。 JNI是如何做到的? 是通过sun.misc.Unsafe吗? 即使不是,我们是否可以使用一些不安全的解决方法来获取执行该操作的JVM代码? 我当然不打算在商业上使用它。 我甚至不是专业人士,我只是非常喜欢编码而且我最近一直在研究CUDA,所以我想也许我可以尝试将所有东西混合在一起,但JNI调用的开销会破坏GPU加速代码的目的。