首先感谢您的帮助。我知道 java 的引用传递机制,我需要从文本文件中读取一百万行(一个单词 + a_list_of_integers每行),并将它们放在一些结构中,这些结构是类属性、一个哈希映射和两个数组列表。
问题是,使用下面的代码,编写以节省重用列表"termine_frequenza"的内存,当我尝试从"频率"数组列表或"dictionaryMarTD"哈希图中获取和元素时,返回的列表始终是我添加的最后一个列表。将"Arraylist termine_frequenza"的声明添加到 虽然显然解决了问题,但由于多个声明,我收到一个先前的"超出 GC 开销限制"错误(我试图增加堆或禁用它,但 GC 填满了 CPU 容量试图释放内存。
问题很简单:如何保存内存,同时获得正确的读数?谢谢。
//Class attributes
private HashMap<String, ArrayList> dictionaryMapTD;
private ArrayList<String> words;
private ArrayList<ArrayList> frequency;
//This is the code of a method of the class that reads from a file
br = new BufferedReader(new FileReader("dictionary.txt"));
s = br.readLine();
String[] splitted;
ArrayList<Integer> termine_frequenza = new ArrayList<>();
while(s!=null)
{
termine_frequenza.clear();
splitted = s.split(" ");
words.add(splitted[0]);
for (int i = 1; i < splitted.length; i++)
{
termine_frequenza.add(Integer.valueOf(splitted[i]));
}
frequency.add(termine_frequenza);
dictionaryMapTD.put(splitted[0], termine_frequenza);
s = br.readLine();
}
//END
更改 eclips.ini 文件中的 XMS/XMX 参数。我把它设置为-Xms256m-Xmx7024m为3000000如果它没有效果,则尝试修改应用程序的参数在你的日食中转到 运行配置->参数->VM 参数为您的应用和放-Xms256m-Xmx7024m
然后在代码中移动termine_frequenza = new ArrayList<>();里面同时和移除termine_frequenza.clear();
GC不应该抱怨就我而言,它运行 7000000 条记录
让我知道它是否有帮助