我正在尝试阅读几个大文件(超过100MB).到目前为止,它总是在OutofMemory Error中间打破.有什么解决方案吗?
FileInputStream fstream = new FileInputStream(f);
// Get the object of DataInputStream
DataInputStream dain = new DataInputStream(fstream);
// BufferedReader br = new BufferedReader(new InputStreamReader(in));
BufferedReader in = new BufferedReader(new InputStreamReader(dain));
String text = in.readLine();
while(text != null) {
stat(text);
text = in.readLine();
}
Run Code Online (Sandbox Code Playgroud)
例外是这样的:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:2694)
at java.lang.String.<init>(String.java:234)
at java.io.BufferedReader.readLine(BufferedReader.java:349)
at java.io.BufferedReader.readLine(BufferedReader.java:382)
Run Code Online (Sandbox Code Playgroud)
以下是Stat的作用:
public void stat(String text) {
String postTypeId = this.getXmlValue(text, "PostTypeId");
String viewCountStr = this.getXmlValue(text, "ViewCount");
String answerCountStr = …Run Code Online (Sandbox Code Playgroud) 我发现我的程序正在增加的内存是因为下面的代码,目前我正在读一个大约7GB的文件,我相信将存储在hashset中的那个比10M的课程,但我的程序的内存持续增加到300MB,然后由于OutofMemoryError而崩溃.如果是Hashset问题,我应该选择哪种数据结构?
if(tagsStr!=null) {
if(tagsStr.contains("a")||tagsStr.contains("b")||tagsStr.contains("c")) {
maTable.add(postId);
}
} else {
if(maTable.contains(parentId)) {
//do sth else, no memories added here
}
}
Run Code Online (Sandbox Code Playgroud)