2016-10-31 17 views
2
@Service 
public class test(){ 
    public Map<String, String> map= new HashMap<>(); 
} 

iは、@Serviceとクラスを注釈付きグローバル変数マップを定義し、その中に値を挿入します。JavaガベージコレクションWebアプリケーションで

私はいくつかの一つはサーバを再起動するかmap.remove()を使用して削除するまで

マップが挿入された値を保持すると仮定する。

私のシニアは私に と言っていましたが、それは理想的な時間とガベージコレクタの後にしばらくの間しか保持されません。

+2

非常に疑わしい – Antoniossss

+4

は、 "それは本当に"非常に疑わしいと思う。彼に説明を求めてください(あなたは何かを学ぶでしょう、それは実際の問題であり、ここにあるのですか、またはこの人に耳を傾けるべきではありません)。しかし、いずれにせよ、あなたがしようとしていることは疑問にも見えます。 –

+0

こんにちは、私は何をしようとしているのか忘れています! @serviceとその中のグローバル変数で注釈を付けられたクラスが、サーバが停止するまでデータを保持するか、数日後にガベージコレクションされるでしょうか? –

答えて

0

マップは、メモリ内のアドレスのリストを保持します。これらのアドレスは

map.put(object); 

にあなたがあなたが結果にとして、あなたの値を格納した場所のアドレスを渡しますが、メモリに保存されている特定の値を取得したいすべての時間を使って、あなたが保存した値を保持しますあなたはあなたの記憶価値を受け取ります。

質問に戻ると、マップから値を削除すると、実際には値が格納されている場所の住所が失われます。そして、もうその値にアクセスする他の方法はありません。値はまだメモリに残っていますが、その場所の住所を削除しているので、値を使用することはできません。 ガベージコレクタはこの値をフラッシュしますが、実行するガベージコレクタを強制することはできません。あなたが行うことができる最善の方法は、System.gc()を呼び出すことです。これは単にガベージコレクタにヒントを与えてコレクションを実行させることです。また、任意の時間に実行されるか、またはJVMがより多くのメモリを必要とする場合に実行されます。

ガベージコレクタがいつ実行され、メモリをクリアするかわからないので、2〜3日でガベージコレクションされることになりました。

+0

よく私の質問は、マップに10個の値を入れた場合です。これらの10個の値は2-3days後にガベージコレクションされ、私の見解はremove()またはサーバーをシャットダウンするか、オブジェクト –

+0

ああ、はい!一部のデータ構造体または一部のオブジェクトに値が格納されている場合、その値を削除または削除したり、コードを再コンパイルしたりしない限り、値はガベージコレクションに使用できません。アプリケーションのインスタンスが1ヶ月間実行されていても、値を格納するためのデータベースは使用していませんが、独自のデータ構造とオブジェクトは使用していません。アプリケーションを終了または再起動しないと、データはオブジェクトに保存されたままになり、ガベージコレクションに使用できなくなります。 –

1

(1)いくつかのいずれかまで地図ホールド挿入された値がmap.remove()を使用して、サーバーまたは 削除を再起動していますか?

はい、正しく、サーバーが再起動されるか、またはmap.remove()またはmap.clear()が呼び出されるまで、データは使用可能になります。

(2)これは、2または3日後に同じように削除されますいくつかの理想的な時間とガベージコレクタ 後しばらくの間だけ保持することが本当ですか?あなたはMapremove()またはclear()を呼び出さない限り

ありませんが、これは間違っている、ガベージコレクタは、オブジェクトをクリアしません。データは、許容される(すなわち、最大ヒープサイズ)まで、そしてサーバー内でOutOfMemory例外を超えるまで、マップにプッシュ/ホールドすることができる。

PS:しかし、あなたが知っている必要がある一点は、それがサービス内の地図には、このようなデータを保存するのは良い考えではない、むしろ、あなたは、キャッシングフレームワーク(Ehcacheの、HazelCast、などを考慮する必要があります。)キャッシュの有効期限のような高度な機能を提供する、データをキャッシュ/格納するための、サーバー間でのデータの配布など。

+0

ちょっとした訂正: 'Map'は単なるインタフェースなので、ある実装ではある条件の下でいくつかのエントリをGCdにすることができます。 ( 'java.util.WeakHashMap'はそのような例の1つです)キーと値の両方を強力に参照し、ガベージコレクションが削除されるか、マップ自体が到達できなくなるまでそれを防ぐのは、特定の' Map'実装の 'HashMap'です。 – biziclop

関連する問題