内存管理如何在java中释放分配的对象?
正如在下面的最小代码中所看到的,我希望当JAVA对象完成时,测试变量中分配的对象是未分配的。如何取消分配此对象?
我使用了null
和system.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 楼答案
Java是一种垃圾收集的语言。它不提供显式释放内存的方法。相反,如果无法访问某个对象,它将成为垃圾收集的候选对象,并在运行时的GC算法确定它需要空间时被删除
现代版本的Java中的GC算法非常复杂,性能也很高。然而,当内存使用率没有接近配置的限制时,不从堆中删除对象是很正常的
这对程序员来说是一个很大的好处——大多数时候你根本不需要担心内存管理。然而,如果您在非常紧张的内存环境中运行,Java可能不是适合您的工具