如何在java中释放已分配的对象?

时间:2017-02-22 11:47:14

标签: java memory-management

从下面的最小代码中可以看出,我希望当JAVA对象完成时,测试变量中的已分配对象是未分配的。如何取消分配此对象? 我使用了nullsystem.gc,但它们无法取消分配对象。

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 个答案:

答案 0 :(得分:2)

Java是一种 Garbage Collected 语言。它没有提供明确释放内存的方法。相反,如果无法访问对象,则它是垃圾收集的候选对象,并且在运行时的GC算法确定它需要空间时将被删除。

现代Java版本中的GC算法非常复杂,性能卓越。但是,当内存使用率未接近配置的限制时,它不会从堆中删除对象是很正常的。

这对程序员来说是一个很大的好处 - 大多数时候你根本不需要担心内存管理。但是,如果您在非常紧凑的内存环境中运行,Java可能不适合您。