gpt4 book ai didi

java - 在java中,静态方法返回后对象会发生什么

转载 作者:行者123 更新时间:2023-11-29 07:48:06 25 4
gpt4 key购买 nike

我有一个占用大量内存的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
}

我担心的是,与在同一类中处理相比,大对象在内存中停留的时间会更长。

最佳答案

只要还有对它的引用,它就会一直存在。一旦最后一个引用超出范围,它就可以被垃圾收集(但它不会立即被收集)。我扩展了您的示例以更清楚地展示

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){

}

enter image description here

这通常没问题。但是您可以通过根本不保留引用来允许它更早地被收集

public static void main(String[] args) {


use(new int[1000][10000]);

while(true){

}

}

public static void use(int[][] in){

}

enter image description here

同样明确地取消变量也可以更早地收集它。

public static void main(String[] args) {

int[][] largeArray=new int[1000][10000];

use(new int[1000][10000]);

largeArray=null;

while(true){

}

}

通常这不值得担心,但如果其他代码处于长循环中,则可能是(尽管这可能是您需要重构代码的标志)

关于java - 在java中,静态方法返回后对象会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23676656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com