- - PR -
JVMにデータを保持する方法
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2004-06-15 11:22
いつもお世話になっております
現在JVMにデータを永続的に保持する方法があるか調査しています。 static宣言した変数に値を格納した場合でも、ガーベッジコレクタの対象になってしまうようなので、ガーベッジコレクタの対象にならないデータの保持方法を知っている方がいらっしゃいましたらお教え願います。 もしくはガーベッジコレクタの対象になるけど、JVMから削除されない方法を知っている方がいらっしゃいましたらお教え願います。 |
|
投稿日時: 2004-06-15 11:34
一般に static な変数がガベージコレクトされるのはクラスの定義自体がガベージコレクトされるタイミングです。
またクラスの定義自体がガベージコレクトされるのはそのクラスを読み込んだクラスローダがガベージコレクトされるタイミングです。 よってガベージコレクトされることのないシステムクラスローダにクラスを読み込ませれば static 変数はガベージコレクトされません。 Servlet などのクラスの static 変数もサーブレット、またはそれを含む Webアプリケーション 、またはそれを含むエンタープライズアプリケーションを再デプロイしないかぎり保持されているはずです。 また、-Xnoclassgc オプションでもクラスのガベージコレクトを抑止することができます。 #多くの場合パーマネント領域の不足などの問題を引き起こすと思いますが・・・・ |
|
投稿日時: 2004-06-15 11:58
クラスGCされない方法ですか・・・
思いつきですが、邪悪かな? 1.JVMプロセスの終了までwait()するだけのユーザースレッドを作成する。 2.上記スレッドのインスタンスフィールド(Threadサブクラス等を作成する)、 メソッドローカル、またはThreadLocalに消えてほしくないオブジェクトへの参照 を置いておく。 1は、JVMプロセス終了まで停止することの無いスレッド、でもよいかもしれません。 |
1
