2016-07-21 8 views
2

私のアプリケーションサーバーで主要なGCがトリガーされているのを見ることができません。これは、私が4GBのメモリを割り当てたからです。最大値は最大1GBです。私はちょうどFull GCが起こるのを見たいと思っています。Javaが一時的なオブジェクトを導入しました

フルGCを起動するには、アプリケーションの実行中に不可能なヒープメモリをフルにする必要があります。だから、サーバを起動しているときに一時的なオブジェクトを配置し、3.5GBでヒープを埋めるように計画しています。

誰かが私にいくつかのアプローチを教えてもらえますか?事前

+0

Ermmm ....大きな配列を割り当てるには 'new'を使います。または、リストを割り当てて、それに多くの要素を追加します。 –

+0

あなたは何を達成しようとしていますか? – bradimus

+0

@bradimus私は、アプリケーションサーバでGCが発生するのを待っています。 – sitakant

答えて

0

おかげであなたがして、コードからGCをトリガすることができます:System.gc() https://docs.oracle.com/javase/7/docs/api/java/lang/System.html#gc()

+3

何もすることは保証されていません。 Full GCをトリガーする保証はありません。 –

+0

@StephenC私はあなたに同意します。 – sitakant

+0

もう一つのことは、実行中の私のコードベースでは、私はこのコードを置くと思うことさえできません。 – sitakant

-2

GCが起動されると、それは唯一のあなたが、それ以上(その参照ポイントへのアクセスを持っていないオブジェクトをきれいにnullにする)。 だから、彼らにGCは、オブジェクトを清掃する必要があることを知っている方法です

SomeObject obj = new SomeObject(); 
    /* 
    use obj 
    */ 
    obj = null; 

を使用して完了した後にオブジェクトの参照にnullを割り当てるようにしてください。

また、ソフトリファレンスとウィークリファレンスを参照することもできます。

+0

nullを作成して参照するために必要なオブジェクトの数はいくつですか? もう1つ、私がヌルにオブジェクトを参照している場合、これはマイナーGCによって収集されます。それがTenuredになるなら、それはメジャーGCを使ってきれいにすることができます。 – sitakant

+0

通常、nullに割り当てる必要はありません。オブジェクトを参照する変数がメソッド内で宣言され、他の変数参照がそのオブジェクトでない場合、メソッドが終了するとオブジェクトは到達不能になります。 –

0

あなたは

jmap -histo:live {pid} 

を実行することができ、これは任意のJavaアプリケーションでフルコレクションがトリガされます。

1

一時オブジェクトのcreatationための簡単なコードです。希望、それはあなたを助けるかもしれません。

for(int i=0;i<100000;++i){ 
map.put(UUID.randomUUID(),UUID.randomUUID()); 
} 

マップをグローバル変数として宣言し、各要求でこのループを実行します。

関連する問題