1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Java memory leaks - analyse tool

  • Farmer Boy
  • 14. September 2007 um 12:31
  • Unerledigt
  • Farmer Boy
    4
    Farmer Boy
    Mitglied
    Punkte
    125
    Beiträge
    16
    • 14. September 2007 um 12:31
    • #1

    kennt wer ein freies tool mit dem man memory leaks im code aufspüren kann?

  • zwutschkerl
    6
    zwutschkerl
    Mitglied
    Punkte
    365
    Beiträge
    71
    • 14. September 2007 um 12:34
    • #2

    Du hast memory leaks in einem Java Programm??

  • Farmer Boy
    4
    Farmer Boy
    Mitglied
    Punkte
    125
    Beiträge
    16
    • 14. September 2007 um 12:41
    • #3

    ja sowas gibts
    bin aber nicht der der die Bibliothek geschrieben hat
    bin nur der der den Fehler finden darf :winking_face:

  • Saruman
    15
    Saruman
    Mitglied
    Reaktionen
    31
    Punkte
    2.236
    Beiträge
    423
    • 14. September 2007 um 13:12
    • #4

    Sollt die Java Runtime sich nicht ums Garbage Collecting kümmern?
    (Ich komm ja mehr aus der .NET, C#, C++ Welt, aber ich dachte das wär so...)

    [EDIT:]
    Anscheined schon, aber net wirklich perfekt:
    http://www.ibm.com/developerworks/java/library/j-leaks/

    Vielleicht hilft dir eins von diesen weiter:
    http://www.quest.com/jprobe/ (10-Tage Trial)
    http://www.geocities.com/moellep/debug/HeapInspector.html (Schaut nach Freeware aus)

    http://alhambra.v3d.at/

  • Farmer Boy
    4
    Farmer Boy
    Mitglied
    Punkte
    125
    Beiträge
    16
    • 14. September 2007 um 14:06
    • #5
    Zitat von Saruman

    Vielleicht hilft dir eins von diesen weiter:
    http://www.quest.com/jprobe/ (10-Tage Trial)
    http://www.geocities.com/moellep/debug/HeapInspector.html (Schaut nach Freeware aus)


    ja mit JProbe von quest arbeit ich bereits schaut ganz gut aus is halt nur a trial

    werd mir das andere auch noch anschauen

    jedenfalls danke

  • Christoph R.
    16
    Christoph R.
    Mitglied
    Reaktionen
    36
    Punkte
    2.626
    Beiträge
    428
    • 14. September 2007 um 14:59
    • #6
    Zitat von Saruman

    Anscheined schon, aber net wirklich perfekt:
    http://www.ibm.com/developerworks/java/library/j-leaks/

    Dort wird ein Memory Leak in Java an folgendem Beispiel erklärt: "Now let's suppose class B is some user interface widget that is displayed and eventually dismissed by the user. Even though class B is no longer needed, if the reference that class A has to class B is not cleared, class B will continue to exist and to take up memory space even after the next garbage collection cycle is executed."

    Das ist doch meiner Meinung nach gar kein Memory Leak aus technischer Sicht. A hat noch eine Referenz auf B, damit wird B potentiell noch benötigt. Woher soll der GC wissen dass es in Wirklichkeit nicht mehr verwendet wird?

    Wikipedia meint zu Memory Leaks: "... ein solches Leck entsteht, wenn ein laufender Prozess einen Speicherbereich belegt, diesen jedoch im Zuge der Ausführung nicht mehr freigibt und durch einen Programmfehler auch selbst nicht mehr nutzen kann."

    Letzteres ist aber nicht gegeben: B kann ja noch verwendet werden. Ein richtiges Memory Leak ist es doch nur, wenn man einen Speicherbereich nicht freigibt und dann auch sämtliche Pointer darauf löscht, oder? Und das kann in Java nicht passieren.

  • Saruman
    15
    Saruman
    Mitglied
    Reaktionen
    31
    Punkte
    2.236
    Beiträge
    423
    • 14. September 2007 um 15:13
    • #7
    Zitat von Christoph R.


    Das ist doch meiner Meinung nach gar kein Memory Leak aus technischer Sicht. A hat noch eine Referenz auf B, damit wird B potentiell noch benötigt. Woher soll der GC wissen dass es in Wirklichkeit nicht mehr verwendet wird?

    Hmm, irgendwie hast du schon recht...

    Ich versteh das eher so, dass Memory Leaks in Java zwar keine Memory Leaks im herkömmlichen Sinn sind, aber trotzdem ähnliche Probleme verursachen können:
    Nehmen wir an, A hat zwar noch eine Referenz auf B, B wird aber nicht mehr "verwendet" bzw. ist durch irgendeine Eigenschaft als inaktiv markiert.

    Das nächste Mal, wenn B benötigt wird, stellt das Programm fest, dass es kein aktives B mehr gibt und legt ein neues an, A bekommt eine zusätzliche Referenz auf das neue B.

    Wenn das ganze jetzt sehr oft hintereinander passiert, hast du schnell eine sehr hohe Anzahl an Bs, die der Garbage Collector nicht löscht, weils ja noch Referenzen drauf gibt.

    Das ist jetzt zwar ein sehr konstruiertes Beispiel mit besonders miesem Programmierstil, aber so ist denk ich ein "Memory Leak" möglich.

    http://alhambra.v3d.at/

  • samyjr
    8
    samyjr
    Mitglied
    Reaktionen
    4
    Punkte
    609
    Beiträge
    117
    • 14. September 2007 um 18:49
    • #8

    Memory leaks sind in Java andere als die, die man von C, C++, etc. kennt. Die GC verleitet sehr oft dazu, das man vergisst, alle reverenzen auf ein nicht mehr gebrauchtes Object auf null zu setzten (Hashtables, Vector, EventListener, etc.):

    Another common problem occurs when you register a class as an event listener without bothering to unregister when the class is no longer needed. Also, many times member variables of a class that point to other classes simply need to be set to null at the appropriate time.

    Zwar ist die "Art" des leaks eine andere, aber im endeffekt passiert das selbe, der speicher wird einfach "vollgemacht", weil man vergisst (aktiv [free] oder passiv mit GC, weil man auf manche reverenzen vergisst) speicher frei-zu-geben.

    bei dem "mit dem selber nicht mehr nutzen kann" geb ich dir recht.

  • phudy
    10
    phudy
    Mitglied
    Reaktionen
    12
    Punkte
    1.087
    Beiträge
    182
    • 16. September 2007 um 17:57
    • #9
    Zitat von samyjr

    reverenzen

    :grinning_squinting_face:

    vor allem die tatsache, dass in LinkedLists jedes element eine reverenz auf das naechste element hat (meines wissens nach steckt hinter der LinkedLists implementierung sowieso eine doppelt verkettete zyklische liste, also noch schlimmer) kann dem GC die arbeit erschweren.

    und bzgl profiling tool:

    - jhat (heapanalyse)
    - BEA JRockit JVM (hat ein integriertes memoryleak analysetool)
    - JProbe, JProfiler, yourKit (sehr gute tools, jedoch nicht kostenlos) // JProfiler ist mein liebling
    - dynaTrace diagnostics, Quest PerformanSure, CA/Wily Introscope (performance-/memory analyse tools)

  • Lord Binary
    18
    Lord Binary
    Mitglied
    Reaktionen
    11
    Punkte
    3.301
    Beiträge
    647
    • 16. September 2007 um 18:39
    • #10

    Ja, JProfiler ist genial, kann ich absolut empfehlen; sein eher hoher Preis ist absolut gerechtfertigt.
    (Ist auch mein bevorzugtes Profiling-Tool)

    mfg, lb


    Trading for a living [equities,futures,forex]

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 16. September 2007 um 22:10
    • #11

    Wir verwenden in der Arbeit yourkit und sind damit auch mehr als zufrieden.

    FProfiler ist ein open source profiler aus den eigenen Reihen ( Mihi hatte das Projekt erst letzten Monat abgegeben), weitere freie profiling software findet sich z.B. hier . Eclipse Profile ist auch nicht uebel.

    Was aber hier auch unbedingt erwähnen sollte: Es wird ja auch bereits ein Profiler zusammen mit dem Java SDK von Sun ausgeliefert: http://java.sun.com/developer/tech…ming/HPROF.html

    Oh, und dann gibt es ja auch noch java.lang.System.currentTimeMillis() :winking_face: . Das reicht oft voellig aus.

    lg, Benjamin Ferrari, bookworm.at

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung