3

在扩展的类中Thread,考虑以下示例:

public void run() {
   while (workToDo) {
        JSONObject json = new JSONObject(getNextMap());
        publishJSON(json.toString());
        //  thread sleep
   }
}

json只要线程正在运行,每个实例是否仍然被引用,还是每次new被调用时都被释放?这应该转移到一个方法,即publishJSON(getJson(getNextMap())

4

1 回答 1

4

要引用对象,它必须是本地使用的变量(在本地范围内)或包含在类实例的成员变量中。

我在您的示例中看不到这两者中的任何一个,因为在每次while迭代之后,局部变量都不能再被引用。因此,除非您在json其他地方保存对它的引用,否则它们有资格进行垃圾收集。

请注意,这并不意味着 GC 将在每次迭代后收集不再引用的实例,因为从开发人员的角度来看,它的行为是不可预测的。你只知道最终它们会被收集起来。

于 2013-08-01T14:27:43.673 回答