OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
締切り
済み

GCのアクションイベント

  • 困ってます
  • 質問No.152661
  • 閲覧数46
  • ありがとう数2
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 0% (0/1)

メモリ不足でGCが起動したというイベントを
受け取りたいのですが
そういった事は可能でしょうか

具体的にいうと
プログラムが大量のキャッシュをメモリに持っていて
メモリ不足になったらMEMORYOUTを起こす
前にキャッシュをクリアさせたいのです
(GCのアクションを受け取ってクリアしたい)

また
GCにインスタンスを開放するように
直接インスタンスを渡す方法はないでしょうか

以上よろしくおねがいします
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全1件)

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

> メモリ不足でGCが起動したというイベントを受け取りたい GC は、メモリ不足になったから起きるとは限りませんが、とりあえず、GC を きっかけにして何かの処理をやりたいのだったら、その処理を finalizer に 記述したクラスを new して、参照を持たないようにしておけば、捕まえられる んじゃないでしょうか? class 処理用のクラス { protected ...続きを読む
> メモリ不足でGCが起動したというイベントを受け取りたい

GC は、メモリ不足になったから起きるとは限りませんが、とりあえず、GC を
きっかけにして何かの処理をやりたいのだったら、その処理を finalizer に
記述したクラスを new して、参照を持たないようにしておけば、捕まえられる
んじゃないでしょうか?

class 処理用のクラス {
protected void finalize() throws Throwable {
/* やりたい処理 */
new 処理用のクラス; /* 参照を持たないインスタンスを生成して次回に備える */
}
}

class メインのアプリケーション {
public static void main(String args[]) {
new 処理用のクラス; /* とりあえず、参照を持たないインスタンスを生成 */
/* 実際の処理 */
}
}

ってな感じで。インスタンスの開放と同時に finalizer が呼ばれる保証がない(はず)
のが玉に傷ですが。


> GCにインスタンスを開放するように直接インスタンスを渡す方法はないでしょうか

参照されていないインスタンスが GC の対象になるわけですから、インスタンスを
参照している変数全てに null を代入すればいいでしょう。

即、GC を起動したいのであれば、System.gc() を使えば良いですね。

# 動作を確認したわけではないので、一応、自信無しとしておきます


このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ