Jump to content

[Java] BugReport... java.lang.OutOfMemoryError: ... Durch IPConnection


Recommended Posts

Hab da glaub ich ein Thread-Alloc no De-Alloc Problem gefunden:

 

Folgender Testcase:

while (true){
try{
IPConnection ipConnection = new IPConnection();
ipConnection.connect("host_den_es_nicht_gibt",4223);
}catch(Exception ex){
  //Hier wirds immer wieder rein kommen, da UnknownHostException
}
}

Das wird ziemlich schnell zu einem MemoryError führen. Grund ist hier:

// NOTE: Assumes that socket is null and socketMutex is locked
void connectUnlocked(boolean isAutoReconnect) throws java.net.UnknownHostException,
                                                     java.io.IOException {
	if(callbackThread == null) {
		callbackQueue = new LinkedBlockingQueue<CallbackQueueObject>();
		callbackThread = new CallbackThread(this, callbackQueue);
		callbackThread.start();
	}

	Socket tmpSocket = new Socket(host, port);
...

 

Nachdem der callbackThread gestartet wurde, wird ein Socket erstellt und der wirft eine Exception und die Methode wird verlassen... Der Thread aber... der läuft !jeweils! weiter.

 

Vorschlag auf die Schnelle:

 

// NOTE: Assumes that socket is null and socketMutex is locked
void connectUnlocked(boolean isAutoReconnect) throws java.net.UnknownHostException,
                                                     java.io.IOException {
try{
	if(callbackThread == null) {
		callbackQueue = new LinkedBlockingQueue<CallbackQueueObject>();
		callbackThread = new CallbackThread(this, callbackQueue);
		callbackThread.start();
	}

	Socket tmpSocket = new Socket(host, port);
...
}catch(Exception ex){
   callbackQueue.put(new CallbackQueueObject(QUEUE_EXIT, (byte)0,(short)0,0, null));
   throw ex;
}

 

 

Link zu diesem Kommentar
Share on other sites

  • 2 weeks later...
  • 3 months later...

Ou, da hab ich einen Task übersehen, der an mich gegangen ist...

 

Was ich weiss: In den 2.1.13 Bindings ist der Memory-Fresser noch drin.

(Mit dem Beispielprogramm, von oben frisst der Java-Prozess pro Sekunde etwa 500kB)

Aber das ist vielleicht, weil ich hier nie geantwortet habe. Soll ich das hier angehängte noch testen? Es scheint mir, als ob das mit dem 2.1.13 bzgl. aufräument im connect() ziemlich übereinstimmt.

 

 

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...