List<List<String>> lists = new ArrayList();
//fileName is a list of files to iterate through and extract data from
for (int x=0; x<fileName.size(); x++) {
// CSV Reader object
CSVReader readFile = new CSVReader(new FileReader(fileName.get(x)));
String[] nextLine = readFile.readNext(); // Parses through first line with headers
/**
* Populates each array with appropriate data
*/
List<String> tempList = new ArrayList();
while ((nextLine = readFile.readNext()) != null) {
tempList.add(nextLine[0]);
}
readFile.close();
lists.add(tempList);
}
我的问题是我认为数组列表是通过引用传递的。当我运行它时,我基本上创建了一个列表列表,然后为我添加的每个文件填充。我认为只要退出此for循环,“tempList”数据就会被取消引用并打开改变记忆。但是,在我的测试中,数据通过一系列计算保持不变而没有任何变化。这是什么原因?
我将在for循环中创建的arraylist传递给另一个列表列表。为什么退出for循环时这个临时列表不会被抛入垃圾收集?
答案 0 :(得分:0)
您在tempList
内添加了对lists
的引用。
lists.add(tempList);
由于lists
引用的对象是可访问的,因此每个引用的对象tempList
也是可访问的。他们不能成为GC。
答案 1 :(得分:0)
在lists
中存储对创建的tempLists
的引用。退出for循环时,引用会保留在那里。如果你想释放它们,那么就可以收集垃圾了。你可以打电话给clear()
。
List<List<String>> lists = new ArrayList<ArrayList<String>>();
for (int x=0; x<fileName.size(); x++) {
//populate data to lists
}
//operate on lists data
lists.clear(); // release the references
GC,只能从不引用其他对象的对象释放内存。