Đây là bài đăng Stackoverflow đầu tiên của tôi, xin lỗi nếu nó không tuyệt vời. Phản hồi chắc chắn sẽ giúp bạn!Twitter4j TwitterStream hoặc BufferReading gây ra java.lang.OutOfMemoryError: Java Heap Space
Tôi hiện đang gặp sự cố java.lang.OutOfMemoryError: Java Heap space
với dự án tôi đang làm việc bằng cách sử dụng API phát trực tuyến Twitter.
Lỗi xuất hiện sau khi phát trực tuyến trong khoảng 500 - 1000 tweet và tôi không thể xác định nguyên nhân khiến nó xảy ra.
Trong phương pháp onStatus
cho StatusListener
Tôi có đoạn mã sau:
public void onStatus(Status status) {
tweetCount++;
System.out.println("Tweet #" + tweetCount);
String statusInfo = status.getText().replaceAll("\n", "").replaceAll("\r", "");
String usersCountry = getTweetUserLocation(status);
status = null;
if(!usersCountry.equals("INVALID_LOCATION")){
countryList.updateWhoTalkedAboutWho(usersCountry, statusInfo);
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("Exception in onStatus() catch block");
e.printStackTrace();
}
}
lỗi có thể được gây ra bởi tốc độ mà tình trạng đang đến? Tôi có thể thấy lý do tại sao nó sẽ mất nhiều bộ nhớ hơn nếu trạng thái đang đến nhanh hơn nhiều so với việc chúng đang được xử lý.
Các nghi can khác là BufferReader
, đây là mã:
URL url = new URL(urlStr);
URLConnection conn = url.openConnection();
BufferedReader rd = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = rd.readLine()) != null) {
sb.append(line);
}
rd.close();
rd=null;
result = sb.toString();
Xin vui lòng cho tôi biết nếu bạn có một ý tưởng tại sao OutOfMemoryError
đang xảy ra. Nếu bạn muốn xem toàn bộ mã, xin vui lòng kiểm tra của tôi GitHub repository
Đây là stack trace sau khi chạm Lỗi:
Exception in thread "Twitter Stream consumer-1[Receiving stream]" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2882)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:515)
at java.lang.StringBuffer.append(StringBuffer.java:306)
at java.io.BufferedReader.readLine(BufferedReader.java:333)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
at twitter4j.StatusStreamBase.handleNextElement(StatusStreamBase.java:85)
at twitter4j.StatusStreamImpl.next(StatusStreamImpl.java:57)
at twitter4j.TwitterStreamImpl$TwitterStreamConsumer.run(TwitterStreamImpl.java:478)
Exception in thread "Twitter4J Async Dispatcher[0]" java.lang.OutOfMemoryError: Java heap space
at java.io.BufferedReader.<init>(BufferedReader.java:80)
at java.io.BufferedReader.<init>(BufferedReader.java:91)
at TweetCountry.sendGetRequest(TweetCountry.java:75)
at TweetCountry.findCountryName(TweetCountry.java:28)
at StreamTweets.getTweetUserLocation(StreamTweets.java:135)
at StreamTweets.access$4(StreamTweets.java:115)
at StreamTweets$1.onStatus(StreamTweets.java:45)
at twitter4j.StatusStreamImpl.onStatus(StatusStreamImpl.java:75)
at twitter4j.StatusStreamBase$1.run(StatusStreamBase.java:114)
at twitter4j.internal.async.ExecuteThread.run(DispatcherImpl.java:116)
cách tăng bộ nhớ heap của IDE chỉnh sửa tệp .ini –
Chương trình sẽ được để lại trong một thời gian, vì vậy hàng nghìn trạng thái sẽ đến. Tăng bộ nhớ heap sẽ không giúp ích gì – xDranik
Ai xuống bình chọn ... làm thế nào để lại một số phản hồi lần sau? – Jonathan