2017-02-22 62 views
-1

以下の最小限のコードでわかるように、私は、JAVAオブジェクトが終了したときに、テスト変数に割り当てられたオブジェクトが割り当てられないようにしたい。このオブジェクトの割り当てを解除するにはどうすればよいですか? nullsystem.gcを使用しましたが、オブジェクトの割り当てを解除することはできません。Javaで割り当てられたオブジェクトを解放するには?

package chatclient; 
/** 
* 
* @author root 
*/ 
import java.io.IOException; 


public class ChatClient { 
    private void run() throws IOException { 
     long test[]=new long[10000000]; 
     test[10000]=100; 
     // Process all messages from server, according to the protocol. 
     test=null; 
     System.gc(); 
    } 

    @Override 
    protected void finalize() throws Throwable { 
     super.finalize(); //To change body of generated methods, choose Tools | Templates. 
    } 

    /** 
    * Runs the client as an application with a closeable frame. 
    */ 
    public static void main(String[] args) throws Exception { 
     while(true){ 
      ChatClient client = new ChatClient(); 
      client.run(); 
     } 
    } 
} 
+1

明示的には使用できません。 –

+2

上記のコメントを少し明確にする:[この質問を読む](http://stackoverflow.com/questions/66540/when-does-system-gc-do-anything)。基本的に、 'System.gc()'呼び出しはJVMのヒントに過ぎません。おそらく、それが気に入ったらガベージコレクションを実行するべきでしょう。しかし、圧力はありません。 – Phylogenesis

+0

**「**働かないでください」という意味の**質問を**編集してください。オブジェクトを「解放」していないと思っているのは何を見ているのですか? 「フリー」はCのコンセプトなので、ここではそれはどういう意味ですか? – slim

答えて

2

Javaはガベージコレクション言語です。明示的にメモリを解放する手段はありません。代わりに、オブジェクトに到達できない場合は、ガベージコレクションの候補であり、実行時のGCアルゴリズムによって領域が必要と判断されたときに削除されます。

現代版JavaのGCアルゴリズムは、非常に洗練されており、高性能です。しかし、メモリ使用量が設定された制限に近づいていないときに、ヒープからオブジェクトを削除しないことは非常に普通です。

これはプログラマーにとって大きなメリットです。ほとんどの場合、メモリ管理について心配する必要はほとんどありません。しかし、非常にきついメモリ環境で実行している場合、Javaは適切なツールではないかもしれません。

関連する問題