今月の投稿: 4月 2010


[android] メモリをたくさん使いたければダイレクトバッファを使えば良い

写真を加工するアプリを作ってたらメモリ不足が多発した (^o^)/

Androidではアプリが使えるヒープ領域が少ないため、気をつけないとすぐにメモリ不足になる。
ヒープが少ないならヒープ外を使えばいいんじゃね、ってことでダイレクトバッファを使えばメモリをたくさん使えます。

package jp.xfutures.android.sample;

import java.nio.ByteBuffer;

import android.app.Activity;
import android.os.Bundle;

public class MemoryLimitCheckActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // これはメモリ不足で落ちる
        ByteBuffer buf1 = ByteBuffer.allocate(20 * 1024 * 1024);

        // こっちなら大丈夫
        ByteBuffer buf2 = ByteBuffer.allocateDirect(20 * 1024 * 1024);
    }
}

たくさん使えるからといって使いすぎには注意です。