将元素添加到列表时的 Java 参考



首先感谢您的帮助。我知道 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 条记录

让我知道它是否有帮助

相关内容

  • 没有找到相关文章

最新更新