- PR -

JVMにデータを保持する方法

1
投稿者投稿内容
ken
常連さん
会議室デビュー日: 2004/04/06
投稿数: 34
投稿日時: 2004-06-15 11:22
いつもお世話になっております

現在JVMにデータを永続的に保持する方法があるか調査しています。
static宣言した変数に値を格納した場合でも、ガーベッジコレクタの対象になってしまうようなので、ガーベッジコレクタの対象にならないデータの保持方法を知っている方がいらっしゃいましたらお教え願います。
もしくはガーベッジコレクタの対象になるけど、JVMから削除されない方法を知っている方がいらっしゃいましたらお教え願います。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-06-15 11:34
一般に static な変数がガベージコレクトされるのはクラスの定義自体がガベージコレクトされるタイミングです。
またクラスの定義自体がガベージコレクトされるのはそのクラスを読み込んだクラスローダがガベージコレクトされるタイミングです。
よってガベージコレクトされることのないシステムクラスローダにクラスを読み込ませれば static 変数はガベージコレクトされません。
Servlet などのクラスの static 変数もサーブレット、またはそれを含む Webアプリケーション 、またはそれを含むエンタープライズアプリケーションを再デプロイしないかぎり保持されているはずです。

また、-Xnoclassgc オプションでもクラスのガベージコレクトを抑止することができます。
#多くの場合パーマネント領域の不足などの問題を引き起こすと思いますが・・・・
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2004-06-15 11:58
クラスGCされない方法ですか・・・
思いつきですが、邪悪かな?

1.JVMプロセスの終了までwait()するだけのユーザースレッドを作成する。
2.上記スレッドのインスタンスフィールド(Threadサブクラス等を作成する)、
メソッドローカル、またはThreadLocalに消えてほしくないオブジェクトへの参照
を置いておく。

1は、JVMプロセス終了まで停止することの無いスレッド、でもよいかもしれません。
1

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