【发布时间】:2016-02-03 10:49:06
【问题描述】:
根据Object.hashCode()的JavaDoc,此方法返回对象的内部地址,将其转换为整数值。
但是垃圾收集器可以将对象从一个内存段移动到另一个内存段,从而改变它的内部地址。例如,对象可以从Young Generation 移动到Old Generation。
参见 java.exe 的以下命令行键:
-XX:+UseSerialGC
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-XX:+UseConcMarkSweepGC
他们决定了垃圾收集的不同算法。
这是否意味着在这种情况下Object.hashCode() 将返回不同的值?
还是总是返回对象初始地址对应的值?
【问题讨论】:
-
是什么阻止您测试哈希码在 GC 活动下是否保持不变?
-
看来我得这么做了。不幸的是,没有 API 可以检测对象从一个内存段移动到另一个内存段。如果哈希码被改变,那么由这些对象构成的哈希表就会被破坏,这是不合适的。
标签: garbage-collection hashcode