首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在内存地址查看对象?

如何在内存地址查看对象?
EN

Stack Overflow用户
提问于 2015-02-13 17:42:02
回答 3查看 963关注 0票数 4

我有线程转储和进程内存转储,其中挂起线程。

代码语言:javascript
复制
at sun.misc.Unsafe.park(Native Method)
- parking to wait for  <0x000000070feebf40> (a java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireShared(AbstractQueuedSynchronizer.java:967)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireShared(AbstractQueuedSynchronizer.java:1283)
at java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lock(ReentrantReadWriteLock.java:727)
at voldemort.store.readonly.chunk.DataFileChunkSetIterator.<init>(DataFileChunkSetIterator.java:66)
at voldemort.store.readonly.chunk.ChunkedFileSet$ROKeyIterator.<init>(ChunkedFileSet.java:617)
at voldemort.store.readonly.ReadOnlyStorageEngine.keys(ReadOnlyStorageEngine.java:478)
at voldemort.server.protocol.admin.FullScanFetchStreamRequestHandler.<init>(FullScanFetchStreamRequestHandler.java:66)

在voldemort.server.protocol.admin.FullScanFetchEntriesRequestHandler.(FullScanFetchEntriesRequestHandler.java:53)

代码语言:javascript
复制
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

但是我需要看看内存位置0x000000070ff40上的是什么对象。有什么简单的方法可以看到这个物体吗?YourKit和jvisualvm都看不到这个内存地址中的内容。

我试过用实例来查找,但其中大多数都有300个实例,这使得分析变得非常困难。

我使用过C#,在那里您可以轻松地使用WinDbg和sos插件搜索内存。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-14 07:59:18

如果您有堆转储和要查找的对象的位置,请在VisualVM中加载该转储并在OQL控制台中使用以下查询

代码语言:javascript
复制
select heap.findObject("0x00000000fe9d4910")
票数 6
EN

Stack Overflow用户

发布于 2015-02-17 08:00:27

我不认为0x000000070Ff40是记忆中的地址。这是对象标识哈希码。标识哈希码是持久化的,但是内存中的地址是不稳定的(GC移动对象)。

票数 0
EN

Stack Overflow用户

发布于 2015-02-17 08:07:23

在内存中找出对象之后,你会得到什么呢?这是ReentrantReadWriteLock的内部对象,线程停在那里等待acquire成功(这意味着锁很忙)。要诊断任何真正的问题,最好是查看源代码。堆栈的这一部分:

代码语言:javascript
复制
...
at java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lock(ReentrantReadWriteLock.java:727)
at voldemort.store.readonly.chunk.DataFileChunkSetIterator.<init>(DataFileChunkSetIterator.java:66)
...

...means --您正在DataFileChunkSetIterator构造函数中寻找一个ReentrantReadWriteLock.readLock().lock()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28505483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档