我用C编写了一个库,它消耗了大量内存(数百万个小块).我写了一个使用这个库的ac程序.我写了一个使用相同库的java程序.Java程序是库周围非常薄的层.基本上只有一个本地方法被调用,所有的工作都会在几个小时之后完成.使用java调用接口,Java和本机库之间没有进一步的通信.也没有Java对象占用了大量的内存.
所以c程序和Java程序非常相似.整个计算/内存分配发生在本机库中.仍然.执行时,c程序消耗3GB内存.但Java程序消耗4.3GB!(顶部报告的VIRT金额)
我检查了Java进程的内存映射(使用pmap).图书馆只使用40MB.因此,Java加载的其他库不是原因.
有没有人对这种行为有解释?
编辑:感谢您的答案到目前为止.为了让多一点更清晰:Java代码什么也不做,但调用本地库ONCE!java堆是标准大小(可能是60MB)并且未使用(除了包含main方法的一个类和调用本机库的另一个类).
本机库方法是一个长期运行的方法,并且可以执行大量的malloc和frees.碎片化也是我自己想到的一种解释.但由于没有Java代码处于活动状态,因此Java程序和c程序的碎片行为应该相同.由于它不同,我还假设在c程序或Java程序中运行时使用的malloc实现是不同的.
我刚刚下载了openjdk源代码,并认识到几乎所有的java.lang.Math类都是用本机c/c ++代码实现的.我想知道是否有任何完全用java编写的实现.
有没有人有任何见解,经验/链接,他们可以指出我添加广告到我正在PhoneGap平台上构建的应用程序?
我一直在搜索,而不是很多信息.以为我会问.提前致谢.
我有两个库(.so),我在java代码中加载.
但是,有一些特定的操作需要Java(Activity)< - > C++(.so files)调用.
我可以使用Native Activity来实现部分功能吗?原生活动是传统活动的补充,还是我必须选择,我将使用哪种活动?
[编辑]
有一组事件可以通过本机活动在本机代码中处理
机器人-NDK /源/机器人/ native_app_glue/android_native_app_glue.h
enum {
/**
* Command from main thread: the AInputQueue has changed. Upon processing
* this command, android_app->inputQueue will be updated to the new queue
* (or NULL).
*/
APP_CMD_INPUT_CHANGED,
/**
* Command from main thread: a new ANativeWindow is ready for use. Upon
* receiving this command, android_app->window will contain the new window
* surface.
*/
APP_CMD_INIT_WINDOW,
/**
* Command from main thread: the …Run Code Online (Sandbox Code Playgroud) 将Visual Studio 2010与本机C++一起使用.编辑autoexp.dat时,是否可以在调试可视化工具预览中使用方法调用的结果?
例如,如果我的班级是Person,我该怎么做:
MyNamespace::Person{
preview(
#("FirstName=", $e->GetFirstName())
)
}
Run Code Online (Sandbox Code Playgroud)
(你可能会问为什么我不只是获取私有成员变量数据,这是因为GetFirstName()委托给第三方库方法调用,所以我没有访问数据成员.另一个原因可能是方法执行一些计算.)
我正在努力理解sun.misc.Unsafe的文档 - 我想因为它不适合一般用途,没有人真的为让它可读而烦恼 - 但实际上我真的需要一种方法来找到一个元素的地址一个数组(以便我可以将指针传递给本机代码).有没有人有任何工作代码这样做?它可靠吗?
我想将GDAL及其JAVA绑定打包到SWT插件中.(PS GDAL使用swig生成Java绑定)
我有所有必需的本机库,并希望将它们打包到我的Eclipse插件中,让其他人使用它而无需在他们的计算机上安装GDAL.
问题是JAVA Binding(或本机lib本身)将从PATH(Window)或LD_LIBRARY_PATH(Linux)查找必要的本机库,而不是在相对位置查找这些库.此外,GDAL还将从环境变量GDAL_DATA中查找一些必要的地理定义数据.
如何解决这两个问题以制作便携式SWT插件?1)包平台特定的本机库2)一些环境变量查找
似乎eclipse无法在没有设置PATH的情况下解析依赖的lib.Bundle-NativeCode(见下文)不起作用.
如果我尝试直接在我的插件中调用System.Library("SomethingNotExist"); 然后我明白了
java.lang.UnsatisfiedLinkError: no SomethingNotExist in java.library.path
Run Code Online (Sandbox Code Playgroud)
如果我在我的插件中调用System.Library("SomethingDoesExist"),那么我得到了
java.lang.UnsatisfiedLinkError: SomethingDoesExist.dll: Can't find dependent libraries
Run Code Online (Sandbox Code Playgroud)
我的插件中的文件结构
org.gdal/
+ src/
+ nativelib/
+ linux32/
+ ...
+ linux32/
+ ...
+ win32/
+ ...
+ win64/
+ ...
+ META-INF
+ MANIFEST.MF
+ gdal-data/
+ gdal.jar
+ build.properties
Run Code Online (Sandbox Code Playgroud)
此插件的build.properties
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.,\
gdal.jar,\
gdal-data/,\
nativelib/
Run Code Online (Sandbox Code Playgroud)
此插件的清单
Manifest-Version: 1.0
Bundle-ManifestVersion: 2 …Run Code Online (Sandbox Code Playgroud) 我完全不熟悉Android SDK的开发.我正在尝试从AIR的原生扩展(在Android上)启动Adobe Reader.
这是我做的(我按照本教程:http://www.adobe.com/devnet/air/articles/extending-air.html).
我有一个控制器:
package com.tokom.adobereader
{
import com.tokom.adobereader.events.AdobeReaderEvent;
import flash.events.EventDispatcher;
import flash.events.StatusEvent;
import flash.external.ExtensionContext;
/**
* A controller used to interact with the system volume on iOS and
* Android devices. Ways to change the volume programmatically
* and to respond to the hardware volume buttons are included.
*
* @author Nathan Weber
*/
public class AdobeReaderController extends EventDispatcher
{
//----------------------------------------
//
// Variables
//
//----------------------------------------
private static var _instance:AdobeReaderController;
private var extContext:ExtensionContext;
//---------------------------------------- …Run Code Online (Sandbox Code Playgroud) 我目前正在开发一个使用react native的应用程序,该应用程序需要启用位置服务来实现其某些功能.我一直在研究是否有一种简单的方法来测试用户是否打开了它们,所以如果不是,我可以显示不同的视图.除了IOS或Android特有的结果之外,我没有找到任何结果.还有其他人找到了解决方案吗?