在VisualVM中格式化oql的结果

时间:2018-05-15 02:47:45

标签: visualvm heap-dump oql

我在visualvm上针对堆转储运行以下oql查询,并希望将creationTime字段格式化为日期时间字段(其存储为Long)。

select { id: s.id.toString(), createdAt: new Date(s.creationTime) }
from org.apache.catalina.session.StandardSession s

以上查询列出了以下输出(剪切)

{
 id = 1010827848,
 createdAt = sun.org.mozilla.javascript.internal.NativeDate@66106135
}
...

很明显,它已被“转换”为日期,但并未显示为人类可读的格式。在日期对象上执行toString()只会导致该字段显示为Invalid Date

  1. 是否可以将Long字段格式化为Date字段?
  2. 使用VisualVM查询时,id字段的值也会关闭。当我使用Eclipse Analyzer查询相同的堆转储时,我看到正确的值(BE27C51E8BF185A2FB3AA9164EC0C647)。可能会发生什么?

1 个答案:

答案 0 :(得分:0)

  1. 输出显示您正在创建JavaScript Date对象。 OQL的正确部分应该是:createdAt: new java.util.Date(s.creationTime)
  2. 字段存在已知问题,名为id。有关详细信息,请参阅Retrieve "id" field values via VisualVM OQL query。作为解决方法,您可以使用s["wrapped-object"].getValueOfField("id")代替s.id.toString()
  3. 通过以上更改,您的查询应为:

    select { id: s["wrapped-object"].getValueOfField("id"),
    createdAt: new java.util.Date(s.creationTime).toString() }
    from org.apache.catalina.session.StandardSession s