【问题标题】:Dollar sign in visualvmvisualvm 中的美元符号
【发布时间】:2010-10-26 21:23:18
【问题描述】:

我正在尝试分析一个应用程序,并且我有很多 sim.core.EndPoint$2 类型的实例

当我检查这些实例时,我确认它们不是 sim.core.EndPoint 类型,它们似乎是一个 EndPoint,还有一些不应该存在的东西。

VisualVM 中类型名称后的美元符号是什么意思?

谢谢。

【问题讨论】:

    标签: java profiling visualvm


    【解决方案1】:

    这意味着它是 EndPoint.java 中定义的匿名内部类。

    顺便说一下,ClassName$AnotherName 是在 JVM 中指定内部类的约定。

    看看 EndPoint 定义了哪些匿名类。

    【讨论】:

    • 嗯,不可能。因为我在 EndPoint.java 中只有一个内部类,EndPointStats 和 EndPoint$2 似乎有一些与 Stats 完全无关的东西,比如与任务调度相关的字段等。谢谢你的帮助。
    • 你能把 EndPoint.java 粘贴到某个地方吗?
    【解决方案2】:

    它肯定是一个编译器工件(对你来说是隐藏的,但它是工作所必需的)。

    如果不是匿名类,可能是匿名对象引用封闭类的方式。您在匿名类中引用的“外部”是否有任何最终对象?

    【讨论】:

    • 实际上,我确实启动了一个新的匿名 sim.core.Task 类,该类使用声明为“外部”的 EndPoint 作为最终。所以 $2 指的是这个 sim.core.Task?
    • 不,它很可能是指端点。 Java 编译器使用诡计让您的匿名类进入最终状态,即使它在另一个类中。
    猜你喜欢
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 2015-08-05
    • 1970-01-01
    • 2015-08-21
    • 2010-11-30
    相关资源
    最近更新 更多