2013-02-04 10 views
7

Czy poniższy wykres wskazuje, że korzystam z pamięci i nie gromadzę śmieci?Czy wskazuje to na przeciek pamięci w Javie?

enter image description here

Spodziewałem pomarańczowy wykres (przydzielona sterty) zejść raz zacząć używać mniej stercie.

  • Czy to nieważne założenie?
  • Po przydzieleniu, czy sterty nie zmniejszają się, dopóki program się nie zamknie?
+2

Na większości JVMs raz sterty alokuje nie kurczyć, aż program się kończy. –

Odpowiedz

10

Z wykresu jasno wynika, że ​​maszyna JVM może zmniejszyć stertę. Widać to z pomarańczowej linii przy lekkim zanurzeniu tuż przed 15.10.

Jednak później JVM zdecyduje się nie zmniejszać sterty. Jest to prawie na pewno spowodowane tym, że niedostatecznie duża część sterty jest nieużywana. Zachowanie jest kontrolowane przez -XX:MinHeapFreeRatio i -XX:MaxHeapFreeRatio.

Do dyskusji, patrz http://stopcoding.wordpress.com/2010/04/12/more-on-the-incredible-shrinking-jvm-heap/

+0

Awesome, thanks. :) – sdasdadas

+0

+1 sprawdź, ile kosztuje po każdym pełnym GC. Jeśli chcesz, możesz wywołać dodatkowe, ale brak pełnych oznaczeń GC wskazuje, że nie masz problemu (lub twój przeciek jest bardzo wolny) –

Powiązane problemy