- PR -

セッションオブジェクトについて

投稿者投稿内容
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2003-08-24 00:09
unibon です。こんにちわ。

引用:

unibonさんの書き込み (2003-08-19 17:21) より:
もしもデータをファイルなどから随時再構築できるのならば、
多少手間はかかるものの SoftReference が便利です。
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/lang/ref/SoftReference.html
あるいは、キャッシュのマネージャを自前で構築するなども考えられます。


その後 API リファレンスを眺めていたら、
WeakReference 系の Map である WeakHashMap
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/WeakHashMap.html
があるのだから、SoftReference 系の Map として、
SoftHashMap があっても良さそうだと思いましたが、
でも標準 API としてはなさそうです。
しかし、
sun.misc.SoftCache
というクラスはあるようです。
#このクラスのソースコードを見たわけではないのですが、
#内部で SoftReference を使っているだけであり、
#他に特別なことはしていないみたいです。

これを使うと、
コード:
import java.util.*;
import sun.misc.SoftCache;

public class Hoge {

    public static void main(String[] args) {
        Map map = new SoftCache();
        // Map map = new WeakHashMap();
        for (int i = 0;; i++) {
            System.out.println("i = " + i + ", size = " + map.size());
            Integer key = new Integer(i);
            int[] value = new int[10000];
            map.put(key, value);
        }
    }
}


のようなことができます。
しかし、挙動を見てみると、
強い(?) GC が起きた段階ですべての参照がご破算になってしまって、
MRU/LRU(Most/Least Recently Used) のような管理は
できないような感じに見えました。
でも、OutOfMemory に陥ることを避けることを
最優先したいような場面なら手軽で便利かもしれません。
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2003-08-26 21:24
こんにちは。

ありました。この本のダイナミックイメージという章に巨大イメージを扱う場合に
メモリバッファのプールの方法がかかれていました。これでチャレンジしてみます。
http://www.seshop.com/detail.asp?pid=3636

スキルアップ/キャリアアップ(JOB@IT)