在扩展Thread
的类中,请考虑以下示例:
public void run() {
while (workToDo) {
JSONObject json = new JSONObject(getNextMap());
publishJSON(json.toString());
// thread sleep
}
}
只要线程正在运行,每个json
实例是否仍然被引用,或者每次调用new
时它们是否被释放?是否应将其移至方法,即publishJSON(getJson(getNextMap())
?
答案 0 :(得分:4)
要获得对象的引用,那么它必须是本地使用的变量(在本地范围内)或包含在类实例的成员变量中。
我没有在你的例子中看到任何两个,因为在每次while
迭代之后,局部变量不再被引用。因此,除非您使用json
执行某些操作,以便在其他位置保存对它的引用,否则它们有资格进行垃圾回收。
请注意,这并不意味着GC会在每次迭代后收集没有更多引用的实例,因为从开发人员的角度来看,它的行为是不可预测的。你只知道他们最终会被收集起来。