我有一个占用大块内存的Object
,我将对象传递给静态辅助方法进行处理。在方法返回后,JVM对Object
做了什么?
public class Helper {
public static boolean processObject(Object object) {
// Do something with object
return true;
}
}
用法:
Object object = new Object(); // large object created
if (Helper.processObject(object)) {
// do something
}
我担心的是大对象会在内存中停留的时间比在同一类中处理的时间长。
答案 0 :(得分:5)
只要仍有参考,它就会坚持下去。一旦最后一个引用超出范围,它就可以被垃圾收集(但它不会被立即收集)。我已经扩展了您的示例以更清楚地演示
public static void main(String[] args) {
int[][] largeArray=new int[1000][10000]; // large object created
use(largeArray);
//object still retained
while(true){
}
}
public static void use(int[][] in){
}
这通常很好。但是你可以通过不坚持参考
来更早地收集它public static void main(String[] args) {
use(new int[1000][10000]);
while(true){
}
}
public static void use(int[][] in){
}
同样明确地将变量置零也会允许它更早收集。
public static void main(String[] args) {
int[][] largeArray=new int[1000][10000];
use(new int[1000][10000]);
largeArray=null;
while(true){
}
}
通常这不值得担心,但如果其他代码处于长循环中,则可能是(尽管这可能是您需要重构代码的标志)