gpt4 book ai didi

java - C++中的JNI JVM无法使用分配的堆内存

转载 作者:行者123 更新时间:2023-11-28 07:50:53 28 4
gpt4 key购买 nike

i am calling java code in c++ using jni ,i alloted 60GB as max heap memory ,but while running its using less memory because of that its taking much time .

我使用的是windows7操作系统,VS2008

同样的事情我使用控制台运行 java,它使用分配的内存,并且速度很快你能帮我解决这个问题吗?

更新说明:

我们有一个内存密集型 Java 应用程序,我们尝试了以下两种方法。

1.来自使用 JNI 的 C++ 应用程序。

2.直接通过命令提示符执行。

在这两种情况下,我们都为 jvm 分配了 60GB 的堆内存大小。我们发现上述两种执行方式有以下区别。

1.c++ 应用程序使用 JNI 达到 40GB 内存。(执行速度慢)

2.通过命令提示符执行达到60GB内存左右(快速执行)

内存使用差异的原因可能是什么??。

jVM 初始化:

JavaVMInitArgs vm_args;
JavaVMOption options[3];

options[0].optionString = "-Djava.class.path=c:\\Application\\bin-7.0\\morpher\\app.jar;";
options[1].optionString = "-Xms1024m";
options[2].optionString = "-Xmx50000m";

vm_args.version = JNI_VERSION_1_6;
vm_args.nOptions = 3;
vm_args.options = options;
vm_args.ignoreUnrecognized = 0;
JNI_GetDefaultJavaVMInitArgs(&vm_args);
int ret = JNI_CreateJavaVM(jvm, (void**)&env, &vm_args);

最佳答案

用这种方式回答你的问题是不可能的,但我可以告诉你。

  • 您可以非常快速地分配堆,每秒 400+ MB 的非常小的对象。大型对象的速度要快得多。
  • 您可能会发现,增加伊甸园大小可以通过减少触发的 GC 数量来提高分配对象的速率。
  • 可能会减慢您速度的是堆收集。我建议通过使用 ByteBuffers 和内存映射文件将大量数据放置在 native 内存中来增加伊甸园大小,同时减少堆。
  • 您可以在几秒钟或更短的时间内附加 500 GB 的内存映射文件。
  • 如果您要创建数百或数百万个对象,则值得重新考虑您的设计以减少对象的数量,例如使用基于列的表而不是基于行的表。 (您可能只有几十列,但数百万行和创建数十个数组比创建数百万个对象更快)

关于java - C++中的JNI JVM无法使用分配的堆内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13814718/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com