Java – outofmemoryerror when reading large files
•
Java
I'm trying to read several large files (over 100MB) So far, it has always been broken in the middle of out of memory error Is there any solution?
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(); }
The exceptions are:
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)
The following are the functions of stat:
public void stat(String text) { String postTypeId = this.getXmlValue(text,"PostTypeId"); String viewCountStr = this.getXmlValue(text,"ViewCount"); String answerCountStr = this.getXmlValue(text,"AnswerCount"); String userId = this.getXmlValue(text,"OwnerUserId"); String postId = this.getXmlValue(text,"Id"); String parentId = this.getXmlValue(text,"ParentId"); String backUpId = this.getXmlValue(text,"LastEditorUserId"); //Add post rel if(parentId==null) { if(!postTable.containsKey(postId)) postTable.put(postId,new PostRel()); } else { try{ postTable.get(parentId).addAnswer(postId); }catch(Exception exp) { } } generalCount(postTypeId,viewCountStr,answerCountStr,userId,postId,parentId,backUpId);
}
In generalcount, I tried to insert another table:
if(userTable.containsKey(userId)) { userTable.get(userId).addPost(postId); if(parentId!=null) userTable.get(userId).addAnswer(parentId); } else{ UserPostInfo newInfo = new UserPostInfo(); newInfo.addPost(postId); if(parentId!=null) newInfo.addAnswer(parentId); userTable.put(userId,newInfo);
Solution
> Give the JVM more memory to work with
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码