2014-04 << 2014-05 >> 2014-06

2014-05-24 (土)

午後出かける.夕方帰ってきて寝る.

*[Android] FileChannel.mapでOut of memoryになって困る

Android(というかJava)で大きいファイルを扱うとき FileInputStream で読んでると遅いので,FileChannel.map()でmmapしたりするけど色々ハマりどころが多い.

複数ファイルを切り替えながらmmapしてるとすぐ「java.io.IOException: mmap failed: ENOMEM (Out of memory)」とか言われてしまう.

ヒープはほとんど使ってないので,単純にアドレス空間の制限に引っかかってるのだろうけど,ファイルを閉じてもMappedByteBufferがガベージコレクタに回収されるまでアドレス空間を専有し続ける.いまのところ,祈りながらSystem.gc()と書く以外の方法が見つからない...

ついでにByteBufferのpositionがintなのがすでに残念だし,ByteBufferの皮をかぶった何かを実装しようと思ったけど,ByteBufferメソッド多すぎて無かったことにした.Java使わずに書いたほうが良さげ.

2014-04 << 2014-05 >> 2014-06