【发布时间】:2013-06-01 11:56:19
【问题描述】:
我有这样的情况:我从 CSV 文件中读取行并将它们放入List<String>。完成后,根据特殊逻辑对行进行解析,并将其部分作为key放入几个HashMap<String, Integer>中。然后列表记录被清除。其实我尝试了几种方法:
records.clear();
records = null;
records = new ArrayList<String>();
但似乎无论如何都没有释放内存(通过使用分析器和简单的打印到控制台检查它)。由于这种重复读取文件和进一步解析的迭代多次重复,有一次我得到一个OutOfMemoryError。
有人可以在这里提出任何解决方案吗? Java有可能解决它吗?或者垃圾收集器的字符串池不可忽略?也许像 C++ 这样的其他语言更合适?
谢谢。
【问题讨论】:
-
我们需要更多代码才能告诉您发生了什么...
-
你清除了 hashmaps 吗?
-
你有几百万行吗?
-
您使用的是哪个 exact 版本的 Java?它可以产生很大的不同。文件有多大,你有多少内存?
-
确保所有对你的字符串的引用都消失了。如果仍然可以从任何地方访问它们,则不会收集它们。如果你有大量的行,并且你将这些字符串存储在一大堆不同的 HashMap 中,那么你可能只是内存不足,简单明了。尝试确定(使用您的分析器)哪些对象持有对所有这些字符串(或其他东西!)的引用!
标签: java memory-management csv