3

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

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

2个选项被考虑:

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

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

4

1 回答 1

5

OutOfMemoryError具有特定含义:

当 Java 虚拟机因为内存不足而无法分配对象时抛出,并且垃圾收集器无法提供更多内存

由于这是一个失败的本机堆分配,因此您的代码抛出此错误是不合适的。不管做什么ByteBuffer.allocateDirect()

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

于 2013-07-11T18:15:30.573 回答