2017-02-22 23 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是一種垃圾回收語言。它沒有提供明確釋放內存的方法。相反,如果無法訪問某個對象,則該對象將成爲Garbage Collection的候選對象,並且在運行時的GC算法確定其需要空間時將被刪除。

現代版本的Java中的GC算法非常複雜,性能高。但是,當內存使用量未達到配置的限制時,它不會從堆中刪除對象是很正常的。

這對程序員來說是一大福音 - 大多數時候你根本不需要擔心內存管理。但是,如果您在非常緊張的內存環境中運行,Java可能不適合您。