Java垃圾收集 - 如何在调用时查找正在运行的方法

时间:2010-09-01 19:26:40

标签: java garbage-collection profiling

假设我正在执行一个没有并行运行垃圾收集的jvm。那是当GC执行我的主线程时停止。

有没有办法可以指定调用GC的当前时刻运行的方法?我知道我可以获得有关时间的信息,但这还不够。 我假设这样的分析信息对于JVM来说很容易提供,因为它只是返回停止线程的每个堆栈的最顶层元素(堆栈帧)。

感谢。

3 个答案:

答案 0 :(得分:4)

我想你想确保垃圾收集不会影响你的基准测试。 一些想法:

  1. 垃圾收集是您软件的一部分,它将始终影响您的软件,因此应该在您的基准测试中表示。
  2. 多次测量您的功能并忽略最慢的3%结果。
  3. 在启动计时器之前调用System.gc()。

答案 1 :(得分:2)

一般没有。 如果那么您可以使用特定于供应商的扩展程序。

问题是,为什么你想知道?

答案 2 :(得分:0)

如果您提供了对JMX的访问权限,您可以看到内存消耗以及存在尖峰的地方还有垃圾收集。

查看正在运行的方法并不精确,但是从堆栈的顶部你可以总是得到String.equals()并且知道什么。