Java 通过哈希代码从内存中获取对象 我的问题与JVM的安全级别有关 如何通过验证哈希代码从内存中获取对象?

Java 通过哈希代码从内存中获取对象 我的问题与JVM的安全级别有关 如何通过验证哈希代码从内存中获取对象?,java,jvm,Java,Jvm,今天我在想。我在一个执行环境中创建了一个类A的对象。从这里获取该对象的哈希代码 现在在另一个执行环境中,我想通过提供散列代码来返回类A对象。 我认为这是可能的。因为当我执行环境一时。我一次又一次地得到JVM返回相同的哈希代码 意味着它首先在缓存中找到对象。如果它得到了引用,就返回它 现在回到问题上来,我们必须了解当我们 写入= Object a=new Object();// here as we know reference of new object will be stored in

今天我在想。我在一个执行环境中创建了一个类A的对象。从这里获取该对象的哈希代码

现在在另一个执行环境中,我想通过提供散列代码来返回类A对象。 我认为这是可能的。因为当我执行环境一时。我一次又一次地得到JVM返回相同的哈希代码

意味着它首先在缓存中找到对象。如果它得到了引用,就返回它


现在回到问题上来,我们必须了解当我们 写入=

  Object a=new Object();// here as we know reference of new object will be stored in refvar a.
那么实际是通过什么呢

如果我们得到传递的数据=(相等运算符)。我们将能够从内存中获取对象


谢谢

我想这是不相关的,因为散列码可能与内存地址有关,也可能与内存地址无关 看一看

一般来说,每个JVM都有自己的内存堆栈,所以是否可以从其他JVM访问对象取决于JVM实现,我想这几乎是不可能的

如何通过验证哈希代码从内存中获取对象

如果没有对JVM内部的访问,您就无法访问它。即使这样,您也需要扫描内存中的每个对象。与使用相同哈希代码的多个对象相比,您也会遇到问题。顺便说一句:默认情况下,在您请求哈希代码之前,对象没有哈希代码

我认为这是可能的。因为当我执行环境一时。我一次又一次地得到JVM返回相同的哈希代码

这仅仅是因为您正在重新创建生成哈希代码的确切条件,只要稍有更改,就会得到不同的哈希代码

意味着它首先在缓存中找到对象。如果它得到了引用,就返回它

您所说的
it
是指需要维护的缓存,JVM中不存在这样的缓存

现在回到问题上来,我们必须理解当我们写=,时复制了什么数据

  Object a=new Object();// here as we know reference of new object will be stored in refvar a.
Object a=new Object();// here as we know reference of new object will be stored in refvar a.
那么实际是通过什么呢


如你所说,引用已传递。没有其他内容。

通过调用对象的
hashCode()
方法返回哈希代码。如果覆盖默认值,则可以为具有相同属性的对象返回相同的哈希代码。默认实现(来自
对象
)不能保证这一点。然而,需要注意的最重要的事情是:1)散列码并不能唯一地标识一个对象;2)散列码并不能表示对象的内存位置。但他们有没有办法得到那个实际地址。当我们在JavaTM中开始执行时,它会根据文档创建新的执行环境,并创建一个新的堆栈。在返回我们在上一次运行中创建的对象的引用时,它是如何实现的?如果你的意思是散列码,那么它不是一个引用,它可能包含一些地址信息,但它不是总是正确的。有时您会得到相同的代码,这是因为jvm在哪个位置的内存地址中分配了相同的空间。表示堆地址、哈希代码或任何其他。但我认为=运算符可以传递JVM寄存器地址或CPU寄存器地址。所以请注明on=equaloperator@D.k.Agrawal
=
是赋值,而不是
=
equals()
,它将对象的地址赋值给变量。此变量可能位于堆栈上或寄存器中,或者如果未使用
a
,则可能会被消除。@D.k.Agrawal引用可以是索引,即不是可用地址,例如,32位JVM可以使用索引到地址的各种转换来寻址高达64 GB的内存。e、 g.
(索引*16)+偏移量