9

我在 Java 中有一个对性能非常敏感的应用程序。(我知道我实际上应该使用 C 或其他东西。但现在是 Java。)我试图避免创建和丢弃对象。现在我需要知道还有多少垃圾收集正在进行。

我怎样才能知道?

如果可能的话,我希望有一个以毫秒或纳秒为单位的数字,不需要安装更多软件。

4

4 回答 4

8

或者你可以让 JVM 打印 GC 活动。我有这些设置:

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

GC 活动被打印到文件logs/gc.log ..

于 2013-04-17T15:10:50.490 回答
7

您可以使用VisualVM等工具来监控应用程序活动。确保您使用适当的 GC 算法。

Oracle JVM 提供多种类型的垃圾收集器:

  • 吞吐量收集器
  • 并发低暂停收集器
  • 增量(有时称为训练)低暂停收集器:

在此处阅读有关这些收藏家的更多信息。

于 2013-04-17T15:05:59.413 回答
2

您可以为此使用VisualVm,​​这正是您所需要的。
正如您在下面看到的,您有非常有用的 GC 活动:

在此处输入图像描述

除了 GC Activity 之外,您还有很多详细信息,例如:堆使用情况、cpu 使用情况、对象实例使用情况等。

于 2013-04-17T15:05:02.830 回答
1

Jprofiler ,它使内存配置文件能够评估内存使用和动态分配泄漏以及 CPU 配置文件以评估线程冲突。

于 2013-04-17T15:07:03.880 回答