我希望其他人解释一下如何在java中获取字符串类实例的地址?有没有办法获得这个?我试过这个但是没有办法解决问题?
答案 0 :(得分:2)
我怀疑你一般可以可靠地得到一个对象的地址,如果你认为你需要,你可能走错了路,尽管Farmor发布的链接给出了一种使用恰当命名的Unsafe
的技术。类。
您还可以使用System.identityHashCode
来获取“默认方法hashCode()返回的给定对象的相同哈希码,无论给定对象的类是否覆盖hashCode()”,如下所述API Javadoc。这反过来“通常通过将对象的内部地址转换为整数来实现,但Java(TM)编程语言不需要这种实现技术。”
答案 1 :(得分:1)
您可以使用JNI或使用Unsafe类获取绝对地址。
然而,两者都是一个不好的想法,因为地址旁边没用。多线程GC可以随时移动对象。即一旦得到它就会无效。
您可以复制/更改地址,但这是导致JVM以无法追踪的方式在随机点崩溃的好方法。即GC查看它并且JVM稍后在某个随机时间点死亡。
答案 2 :(得分:0)
你的意思是内存中的物理地址吗?如果是这样,那么没有 - Java为你管理内存的抽象。
(你想要实现的是什么?可能在Java中有更多惯用的方法;你不应该直接需要内存地址。从逻辑上讲,对字符串的引用是该对象的“地址”。)
答案 3 :(得分:0)
Java语言不支持内存地址的概念,因为运行时会为您执行所有内存管理。
可以想象你可以用JNI做一些诡计,但我认为它根本不可靠,因为不能保证任何对象的地址不会随意改变,例如用垃圾收集器清扫。
答案 4 :(得分:0)
您可以获得logical memory address。
您无法获得的绝对物理内存地址。
答案 5 :(得分:0)
您无法在纯Java中获取对象的内存地址。
即使你可以,你也无法可靠地使用它。 GC可以随时运行并移动对象,使指针指向空白区域,指向其他对象的中间或指向不同类型的对象。
如果你对某些(理论上)不透明的JNI类型有内部知识,你应该能够提取一个地址。而且我也相信有一个sun.java.Unsafe
类可以做到这一点......虽然你需要把类加载器弄乱来使用它。