当前位置: 首页 > 面试题库 >

jvm中的Java对象ID

劳法
2023-03-14
问题内容

调试时,在Eclipse中对象值附近显示一个对象ID。

例如:28332是会话对象的ID。另一个示例waiting for: (id=101)显示在“调试”面板中。这些ID既不是哈希码,也不是System.identityHashCode

有人知道this吗-如何获取对象的ID?


问题答案:

我假设它们在内部具有IdentityHashMap<Object, Integer>,为每个对象分配一个唯一的(但无意义的)整数。这应该在Eclipse调试器的内部(而不是对象具有的特殊ID)。您在问如何达到目标吗?

编辑 :我会这样设置断点(请注意,我不太熟悉Eclipse):

  • 我将有一个初始断点(就像您用来截屏的那个断点一样),并打印System.identityHashCode(object)我感兴趣的对象的。
  • 然后,我将使用condition创建一个断点System.identityHashCode(object) == <whatever number you saw at the previous step>。这种情况很少会停在错误的物体上。

或者,如果您感兴趣的对象具有toString()可以使用的适当表示形式,则也可以尝试使用代替System.identityHashCode(object)。在所有情况下,您都不必依赖Eclipse的内部对象ID,而是捕获id(或几乎)可以从对象本身派生的对象。



 类似资料:
  • 每个java开发人员都知道,java对象不再使用时将被垃圾收集。我想知道JVM如何识别必须为垃圾收集选择的对象。(例如,如果我有10个对象。如果对10个对象中的2个进行垃圾收集,jvm将如何找到这两个对象)。 JVM使用标记和扫描算法(如果我是对的)。 1)例如我在下面提供字符串对象场景 //现在s1

  • 问题内容: 我正在学习Java,记得在某个地方读过Java对象,但JVM内部有一些开销,JVM出于虚拟机的管理原因而使用了这些开销。所以我的问题是,有人可以告诉我是否以及如何在HotSpot JVM中获得对象的总大小以及它可能带来的任何开销吗? 问题答案: 您无法直接获得开销。开销量取决于实现方式,并且可以根据多种因素(例如,精确的JVM版本以及您使用的是32位还是64位JVM)而有所不同。 但是

  • 问题内容: 我正在自学Java,这本书中的其中一项复习练习要求“对象”和“对象变量”之间的区别。 我知道什么是对象(类的特定实例),但是我似乎无法在书中的任何地方(无答案部分)或在互联网上找到术语“对象变量”。 有人知道这个名词的意思吗? 问题答案: 它是“实例变量”的同义词: 显然,该术语并不常用,最好坚持使用“实例变量”以避免任何潜在的歧义。

  • 问题内容: 查理·亨特(Charlie Hunt)在他的演讲中说,大型对象对JVM GC不利。因为: 大对象的分配和初始化非常昂贵。 不同大小的大对象可能会导致Java堆碎片化。 如何定义大对象?我怎么知道物体是否是大物体?谢谢 问题答案: 该定义取决于平台,JVM和JVM配置。例如,以下摘自Michael Kopp 的三篇大型JVM 博客文章 中的“垃圾回收如何不同” : 大小物体 JRocki

  • 问题内容: 维护一个经常使用的对象的池并从池中获取一个而不创建一个新对象的优点和缺点是什么。类似于字符串实习,只是所有类对象都可以使用。 例如,由于节省了gc时间和对象创建时间,因此可以认为它很好。另一方面,如果从多个线程中使用它,则可能是一个同步瓶颈,需要进行显式释放,并可能导致内存泄漏。通过占用可以回收的内存,它对垃圾收集器施加了额外的压力。 问题答案: 除非创建对象昂贵,否则我不会打扰。 好