[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);
    }
}

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

コメントをする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>