Bu benim ilk Stackoverflow gönderim, büyük değilse üzgünüm. Geribildirim kesinlikle yardımcı olacaktır!Twitter4j TwitterStream veya BufferReading neden java.lang.OutOfMemoryError: Java Heap Space
Şu anda bir kullanıcıyla birlikte bir java.lang.OutOfMemoryError: Java Heap space
sorunuyla karşılaşıyorum Twitter Akış API'sini kullanıyorum.
Hata, yaklaşık 500 - 1000 tweet akışında yayınladıktan sonra geliyor ve bunun nedenine neden olduğunu belirleyemiyorum.
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();
}
}
hata durumu geliyor hızından kaynaklanabilir Could: Aşağıdaki kod var StatusListener
için onStatus
yöntemde
? Durumun işlenmekte olduğundan daha hızlı gelmesi durumunda neden daha fazla bellek alacağını anlayabiliyorum.
diğer şüpheli burada, BufferReader
olan koddur:
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();
Eğer OutOfMemoryError
oluştuğu niçin bir fikir varsa bana bildirin. Eğer tüm kodu görmek istiyorsanız, kontrol edin benim İşte GitHub repository
olan Hatası çarptıktan sonra yığın izleme:
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)
IDE'nizin yığın belleğini artırma hakkında .ini dosyasını düzenleme hakkında –
Program oldukça uzun bir süredir açık kalacak, böylece binlerce durum gelecektir. Yığın belleğinin artırılması bu konuda yardımcı olmayacaktır. – xDranik
Kim oy kullandıysa ... bir dahaki sefere bazı geri bildirimler bırakmaya ne dersin? – Jonathan