2013-04-17 12 views
8

Mam bardzo wydajną aplikację Java. (Wiem, że powinienem używać C lub czegoś innego, ale teraz jest to Java.) Próbuję unikać tworzenia i wyrzucania obiektów. Teraz muszę wiedzieć, ile jeszcze trwa zbieranie śmieci.Czas zbierania śmieci Java?

Jak mogę się dowiedzieć?

Jeśli to możliwe, chciałbym mieć liczbę w milisekundach lub nanosekundach, co nie wymaga instalacji dodatkowego oprogramowania.

+0

Zaledwie heads-up że C nie jest lepiej dopasowany niż Java - zależy to od tego, jak je porównasz. [To jest dobre porównanie, które znalazłem] (http://www.azulsystems.com/blog/cliff/2009-09-06-java-vs-c-performanceagain), najważniejsze jest to, że C jest lepsze niż Java dla pamięci i dla programów intensywnych numerycznie, podczas gdy Java ma lepszą obsługę wielowątkowości. Artykuł badawczy, który przeczytałem kilka lat temu, stwierdził, że (jeśli pozwolisz, by stos Javy wzrósł do 4 razy więcej niż sterty C), nie było różnicy w wydajności między dwoma językami dla wielu programów Sourceforge. –

+0

możliwy duplikat [Tuning garbage collections for low latency] (http://stackoverflow.com/questions/2781797/tuning-garbage-collections-for-low-latency) –

Odpowiedz

2

Możesz użyć VisualVm do tego, to jest dokładnie to, czego potrzebujesz.
Jak widać poniżej masz działalność GC, który jest bardzo przydatny:

enter image description here

obok działalności GC masz dużo informacji tam jak: wykorzystanie sterty, użycie procesora, instancje obiektów itp

7

Możesz użyć narzędzi takich jak VisualVM do monitorowania aktywności aplikacji. Upewnij się, że używasz odpowiednich algorytmów GC.

Oracle JVM zapewnia wiele rodzajów śmieci kolekcjonerów:

  • Przepustowość kolektor
  • Jednoczesne niski pauza kolektor
  • Narastająco (czasami nazywane pociąg) niskiej kolektor pauza:

Przeczytaj więcej na temat tych kolektorów here.

+0

+1 miłe sugestie na temat typów kolekcjonerów :) – Stephan

+2

+1 Uwaga: w przypadku programów o niskim GC VisualVM utworzy więcej śmieci niż Twoja aplikacja. Do tego używam YourKit, który nie jest darmowy. Zacznę od VisualVM. –

+0

Istnieje również wtyczka do VisualVM o nazwie VisualGC, która pokazuje, co dzieje się dla każdej przestrzeni sterty w czasie rzeczywistym. https://blogs.oracle.com/klc/entry/visualgc_plugin_for_visualvm – Aaron

1

Jprofiler, która umożliwia obu profilom pamięci ocenę wykorzystania pamięci i wycieków alokacji dynamicznej oraz profilowanie procesora w celu oceny konfliktów wątków.

7

Albo można pozwolić JVM wydrukować aktywność GC .. Te ustawienia mam:

-verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintTenuringDistribution -Xloggc:logs/gc.log 

aktywność GC jest drukowana do pliku dzienniki/gc.log ..

Powiązane problemy