如果我使用ByteBuffer(etc)直接访问内存,如果内存使用太大(堆外),会抛出什么样的异常?JVM对它有控制吗?我知道在这种情况下,JVM与此无关。请纠正我。
提前感谢
发布于 2013-06-11 02:34:28
在Oracle JVM中,如果您尝试使用大于可用内存的参数调用ByteBuffer.allocateDirect(),您将得到一个带有消息"Direct buffer memory“的IOException。如果没有将-XX:MaxDirectMemorySize设置为所需的内存量,也可能出现此异常。
此外,您还可以获得文档中指定的IllegalArgumentException。
一旦您分配了缓冲区,如果您尝试在缓冲区末尾进行读取,您将得到一个BufferUnderflowException;如果您试图在缓冲区末尾之后进行写入,您将得到BufferOverflowException。这些也在文档中。
https://stackoverflow.com/questions/17030296
复制相似问题