0

如果我直接使用 访问内存ByteBuffer(etc),如果内存使用太大(堆外)会抛出什么样的异常?JVM对它有任何控制权吗?我知道在这种情况下 JVM 无关紧要。请纠正我。

提前致谢

4

1 回答 1

1

在 Oracle JVM 中,如果您尝试ByteBuffer.allocateDirect()使用大于可用内存的参数进行调用,您将收到IOException消息“直接缓冲内存”。如果您没有设置-XX:MaxDirectMemorySize所需的内存量,也可能会出现此异常。

此外,您可以获得IllegalArgumentException文档所示的。

一旦你分配了缓冲区,如果你尝试读取缓冲区的末尾,你会得到一个BufferUnderflowException; 如果你尝试写超过缓冲区的末尾,你会得到BufferOverflowException. 这些也在文档中。

于 2013-06-10T18:34:28.300 回答