Achtung Java: Memory Leaks durch Thread Objekte (Quizz)

Ich habe letzte Woche einige Zeit mit dem Eclipse Profiler verbracht, um ein merkwürdiges Memory Leak in unserer Software zu finden. Eigentlich ist das ja nicht mein Job, aber da mich der Bug von einer Kunden Demo abgehalten hat, und da ich es hasse wenn ich die Ursachen von solchen Problemen nicht kenne, habe ich ein paar Stunden meiner Freizeit im Debugger verbracht. Problem war, dass eine unserer Komponenten sowohl synchron, als auch asynchron (mittels eigenem Thread Pool) aufgerufen werden kann. Beim synchronen Aufruf der Funktion lief aber reproduzierbar und schnell der Speicher zu. Meine Vermutung war ja erst, dass der Thread Handler am Ende der run methode noch irgendwelche cleanup tasks übernimmt, die der selten benutzte synchrone Code vergisst. Aber die Ursache ist an einer anderen Stelle, tief in der Java API zu suchen:
public class Processor extends Thread {
public Processor() {
}

public void run() {
// do something important
}
}

public class Starter {
public void start(boolean async) {
Processor p = new Processor();
if (async) {
p.start();
} else {
p.run();
}
}
}
Na wer findet das Memory Leak bei Starter.start(false)? Auflösung im nächsten Blog Eintrag. BTW: hat jemand eine Ahnung wie ich einfach Java Quelltext in S9Y pasten kann (am besten mit Syntax Coloring). Oder wie ich NL2BR partiell deaktivieren kann?

Trackbacks


Deprecated: Function create_function() is deprecated in /var/www/itblog.eckenfels.net/data/plugins/serendipity_event_markdown/lib/Michelf/Markdown.php on line 1502

IT Blog am : Achtung Java: Memory Leaks durch Thread Objekte (Lösung)

Vorschau anzeigen

Fatal error: Uncaught Error: Call to undefined function mb_convert_encoding() in /var/www/itblog.eckenfels.net/data/templates_c/2k11/b5/ec/fc/b5ecfc87d304c2e099898d2117cb5f736eee79ca_0.file.trackbacks.tpl.php:62 Stack trace: #0 /var/www/itblog.eckenfels.net/data/bundled-libs/Smarty/libs/sysplugins/smarty_internal_template.php(371): content_589e781fde6d88_91821900(Object(Smarty_Internal_Template)) #1 /var/www/itblog.eckenfels.net/data/bundled-libs/Smarty/libs/sysplugins/smarty_template_compiled.php(202): Smarty_Internal_Template->getRenderedTemplateCode() #2 /var/www/itblog.eckenfels.net/data/bundled-libs/Smarty/libs/sysplugins/smarty_internal_template.php(246): Smarty_Template_Compiled->render(Object(Smarty_Internal_Template)) #3 /var/www/itblog.eckenfels.net/data/bundled-libs/Smarty/libs/Smarty.class.php(820): Smarty_Internal_Template->render(true, false, false) #4 /var/www/itblog.eckenfels.net/data/include/functions_smarty.inc.php(81): Smarty->fetch('file:/var/www/i...', NULL, NULL, Object(Serendipity_Smarty), false) #5 in /var/www/itblog.eckenfels.net/data/templates_c/2k11/b5/ec/fc/b5ecfc87d304c2e099898d2117cb5f736eee79ca_0.file.trackbacks.tpl.php on line 62