2012-08-15 61 views
0

我有,我希望留下来为左右时间长短不一,他们可以被垃圾回收之前的对象长期运行(多天)的应用程序。比方说,有四类:如何分析是哪一代哪些对象?

  1. 寿命很短(< 1S)
  2. 活着的用户关注(1S < 18H)
  3. 每日数据(〜24小时)
  4. '永恒' 期限(很少,应用程序的生命)

为了帮助调优,我想找到一种方法来检查使用Java 6 Hotspot虚拟机检查实际数据进入终身代的方式。使用jmap生成HPROF文件似乎不包括世代信息。有没有另外一种获取这些信息的方法?

回答

0

没有,有没有简单的方法来获得代信息单独的对象。事实上,如果你要求“活”的物体,这将触发一个完整的GC,并将所有的物体放入旧一代(所以现在你知道所有的物体在哪里,但不是它们在哪里)

生存完整的GC很可能是在老一代的,所以如果你的系统没有一个完整的GC每隔5分钟,任何事情持续时间长于是一样的。

你能做的最好的事情是尽量减少丢弃的对象(使用内存分析器来帮助)这将改善GC性能和descrease它们出现的频率。在极端的例子中,你可以使用堆内存,这是难以工作,但使用旁边没有堆。如果你有很多GB的数据,尤其有用。

+0

鉴于VisualVM的使用Visual GC插件不显示的大小事在个别世代,我认为有可能是另一种方式,没有这样的运气挂钩? – sharakan 2012-08-16 15:15:04

+0

不是我所知道的。我怀疑,扰乱系统的开销使得很难有意义。 – 2012-08-17 19:30:28