从动态库调用jni时,JVM堆内存不足
Not enough memory for JVM heap when calling jni from dynamic library
我有一个奇怪的情况:我们有。dll库(让我们称之为'sdk_wrapper'),这是java类的包装器,它正在打开JRE jvm.dll并使用其他一些。dll (PKCS11实现,更具体地说-但我认为这并不重要)。
当我直接在我的c++程序(别名'run_dll')中使用sdk_wrapper时,一切工作正常。但是,当我将它打包到另一个.dll(准备配置文件,初始化库等)并导出一个函数,该函数与程序'run_dll'一样,调用这会导致jvm初始化错误:Could not reserve enough space for object heap
。
-Xmx512m
做的。你知道发生了什么事吗?我读到JVM需要连续的内存部分来初始化,但是直接从程序和从另一个dll调用'sdk_wrapper'之间的区别是什么?它们在同一个地方(我的意思是在同一个目录中)。
当您将库加载到内存中时,您将结束地址空间的内存碎片。Win32在这方面尤其糟糕。
注意:如果你使用64位进程,这不是一个问题,因为你将有足够的虚拟内存
相关文章:
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- 在内存不足之前,我可以声明多少个 const 变量?
- 如何避免由于内存不足而导致 gcc 崩溃
- 检测到由于操作系统内存不足而导致子进程终止
- 导出 vulkan 内存分配句柄会导致设备内存不足
- 如何消除ROS打开CV中的内存不足错误?
- 32 位应用程序内存不足
- 在本机 Android 应用中处理内存不足
- 在 Linux 上C++的无限循环中捕获内存不足的错误 bad_alloc()
- 处理静态数组内存C++的内存不足情况
- 访问违规可以是一个伪装的内存不足错误吗
- g++ 内存不足为 std::bitset 分配
- C++ 分配器在内存不足时使应用程序崩溃
- 使用队列的非递归回溯:内存不足
- C++ : 内存不足时应返回什么?
- 使用 sqlite3 时内存不足
- std::int 和 struct 内存不足的映射 (std::Bad_alloc) c++
- SQLITE 内存不足 无法执行语句
- 内存不足的概念
- 从动态库调用jni时,JVM堆内存不足