jum*_*mar 3 java nio bytebuffer filechannel
我正在使用ByteBuffers
并将FileChannels
二进制数据写入文件.当为大文件或连续多个文件执行此操作时,我得到一个OutOfMemoryError
例外.我在其他地方读过,Bytebuffers
与NIO一起使用已被打破,应该避免.你们中是否有人遇到过这种问题,并找到了一个有效地在java文件中保存大量二进制数据的解决方案?
jvm选项是否可行-XX:MaxDirectMemorySize
?
我想说不要创建一个包含所有数据的巨大ByteBuffer.创建一个小得多的ByteBuffer,用数据填充它,然后将这些数据写入FileChannel.然后重置ByteBuffer并继续,直到写入所有数据.
查看Java的“ 映射的字节缓冲区”,也称为“直接缓冲区”。基本上,此机制使用操作系统的虚拟内存分页系统将缓冲区直接“映射”到磁盘。操作系统将能够非常快速地自动神奇地自动将字节移入磁盘和内存,并且您不必担心更改虚拟机选项。与传统的基于Java流的I / O相比,这还将使您能够利用NIO的改进性能,而不会产生任何怪异的破解。
我能想到的仅有两个要点是:
Kirk Pepperdine(一个有点出名的Java性能专家)参与了一个网站www.JavaPerformanceTuning.com,该网站提供了更多MBB详细信息:NIO Performance Tips
归档时间: |
|
查看次数: |
7798 次 |
最近记录: |