我有以下 JAVA 类可以从包含多行制表符分隔字符串的文件中读取。示例行如下所示:
GO:0085044 GO:0085044 GO:0085044
代码读取每一行并使用 split 函数将三个子字符串放入一个数组中,然后将它们放入一个两级哈希中。
public class LCAReader {
public static void main(String[] args) {
Map<String, Map<String, String>> termPairLCA = new HashMap<String, Map<String, String>>();
File ifile = new File("LCA1.txt");
try {
BufferedReader reader = new BufferedReader(new FileReader(ifile));
String line = null;
while( (line=reader.readLine()) != null ) {
String[] arr = line.split("\t");
if( termPairLCA.containsKey(arr[0]) ) {
if( termPairLCA.get(arr[0]).containsKey(arr[1]) ) {
System.out.println("Error: Duplicate term in LCACache");
} else {
termPairLCA.get(arr[0]).put(new String(arr[1]), new String(arr[2]));
}
} else {
Map<String, String> tempMap = new HashMap<String, String>();
tempMap.put( new String(arr[1]), new String(arr[2]) );
termPairLCA.put( new String(arr[0]), tempMap );
}
}
reader.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
当我运行程序时,运行一段时间后出现以下运行时错误。我注意到内存使用量不断增加。
线程“主”java.lang.OutOfMemoryError 中的异常:在 java.util.regex.Pattern.(Pattern.java:1150) 处的 java.util.regex.Pattern.compile(Pattern.java:1469) 处超出 GC 开销限制java.util.regex.Pattern.compile(Pattern.java:840) 在 java.lang.String.split(String.java:2304) 在 java.lang.String.split(String.java:2346) 在 LCAReader.main (LCAReader.java:17)
输入文件差不多2G,我运行程序的机器有8G内存。我还尝试了 -Xmx4096m 参数来运行程序,但这没有帮助。所以我猜我的代码中有一些内存泄漏,但我找不到它们。
谁可以帮我这个事?提前致谢!