gpt4 book ai didi

java - Twitter4j TwitterStream 或 BufferReading 导致 java.lang.OutOfMemoryError : Java Heap Space

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:29:33 24 4
gpt4 key购买 nike

这是我的第一篇 Stackoverflow 帖子,如果不是很好,请见谅。反馈肯定会有帮助!

我目前在使用 Twitter Streaming API 的项目中遇到了 java.lang.OutOfMemoryError: Java Heap space 问题。

在传输大约 500 - 1000 条推文后出现错误,我无法查明是什么原因导致的。

StatusListeneronStatus 方法中,我有以下代码:

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();
}
}

错误可能是由状态进入的速度引起的吗?我可以理解为什么如果状态接收速度比处理速度快得多,它会占用更多内存。

另一个可疑的是BufferReader,这里是代码:

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();

如果您知道为什么会发生 OutOfMemoryError,请告诉我。如果您想查看完整代码,请查看我的 GitHub repository

这是遇到错误后的堆栈跟踪:

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)

最佳答案

我现在知道我做错了什么了!状态监听器中的 onStatus() 方法应该(最多)存储传入的状态信息而不是处理。这次我将使用两个程序,一个用于使用状态信息填充数据库或文件,另一个用于处理该数据。

关于java - Twitter4j TwitterStream 或 BufferReading 导致 java.lang.OutOfMemoryError : Java Heap Space,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17037074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com