我在Java中有一個對性能非常敏感的應用程序。 (我知道我實際上應該使用C或其他東西,但它現在是Java)。我試圖避免創建和扔掉對象。現在我需要知道還有多少垃圾正在收集。Java垃圾收集時間?
我如何知道?
如果可能,我想有一個以毫秒或納秒爲單位的數字,它不需要安裝更多的軟件。
我在Java中有一個對性能非常敏感的應用程序。 (我知道我實際上應該使用C或其他東西,但它現在是Java)。我試圖避免創建和扔掉對象。現在我需要知道還有多少垃圾正在收集。Java垃圾收集時間?
我如何知道?
如果可能,我想有一個以毫秒或納秒爲單位的數字,它不需要安裝更多的軟件。
您可以使用VisualVm,這正是您所需要的。
正如你可以看到下面你有GC活動,這是非常有用的:
你身邊有很多細節有GC的活動,如:堆使用,CPU使用率,對象實例的使用等
Jprofiler,它啓用兩個內存配置文件來評估內存使用情況和動態分配泄漏以及CPU分析以評估線程衝突。
或者你可以讓JVM打印GC活動。這些設置,我有:
-verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintTenuringDistribution -Xloggc:logs/gc.log
GC活動打印到文件日誌/ gc.log ..
剛擡起頭C不比Java更好 - 這取決於你如何比較它們。 [這是一個很好的比較我發現](http://www.azulsystems.com/blog/cliff/2009-09-06-java-vs-c-performanceagain),底線是C比Java更好內存佔用和數字密集型程序,而Java具有更好的多線程支持。我幾年前閱讀的一篇研究論文發現(如果讓Java的堆增長到C堆的4倍),許多Sourceforge程序在兩種語言之間沒有性能差異。 –
[爲低延遲調優垃圾回收](http://stackoverflow.com/questions/2781797/tuning-garbage-collections-for-low-latency) –