我在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) –