java - 我应该从应用程序 native 库(通过 JNI 使用)中抛出 java.lang.OutOfMemoryError 吗?

标签 java java-native-interface out-of-memory

我正在设计一个解决方案,其中包括一个 C++ 库和几个通过 JNI 使用该库的 Java 应用程序。

C++ 库大量分配 native 内存。当此分配失败时,可以从 C++ 代码中检测到。分配失败应该通过抛出一些可抛出的东西来报告给 Java 代码。

考虑了 2 个选项:

  1. 从我的 C++ 代码中抛出 java.lang.OutOfMemoryError
  2. 添加 mylibrary.MyLibraryOutOfMemoryError(扩展 java.lang.RuntimeException 或 java.lang.Error),并抛出它

什么是正确的选择,为什么?

最佳答案

OutOfMemoryError具体含义:

Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector

由于它是失败的 native 堆分配,因此您的代码抛出此错误是不合适的。尽管 ByteBuffer.allocateDirect() 做了什么。

我建议您创建自己的异常,扩展 Error。它应该是一个已检查的异常,因为正在运行的程序几乎/没有什么可以避免错误。

关于java - 我应该从应用程序 native 库(通过 JNI 使用)中抛出 java.lang.OutOfMemoryError 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17599954/

相关文章:

java - 如何将 IntelliJ 中的常量默认为私有(private)?

java - 无需用户名/密码的自定义身份验证

Android nativeLoad崩溃

java - 如何调用从 JNI 返回数组的 C++ 方法并将数组的内容转换为 java 类数组?

java - 将 ByteBuffer 传递给 jni,以便 C 代码在其内存地址中执行写操作

java - 如何处理 "java.lang.OutOfMemoryError: Java heap space"错误?

java - 使用 Java 的 LinkedIn API 身份验证

java - 为什么 Java 对象是指向指针的指针?

ios - 关于应用进入暂停状态后点击应用图标后应用状态的问题

.net - 加载大量小图像时出现 OutOfMemory 异常