Java/JVM中匿名对象的JVM内存存储位置及哈希码获取方法
Java匿名对象的JVM内存区域与哈希码获取
一、匿名对象在JVM中的存储区域
匿名对象和普通Java对象没有本质区别,它会被存储在JVM的堆内存中:
- 在Java 8及后续版本里,堆内存分为新生代(Eden区、Survivor区)和老年代。新创建的匿名对象首先进入Eden区,若经过垃圾回收后仍存活,会逐步移入Survivor区,最终进入老年代。
- 因为匿名对象没有被任何引用变量持有,它会成为下一次垃圾回收的候选对象,很快就会被回收释放内存。
二、获取匿名对象哈希码的方法
所有Java对象都继承自Object类,因此可以通过以下两种方式获取匿名对象的哈希码:
1. 直接调用hashCode()方法
直接在匿名对象上调用Object类的hashCode()方法即可,示例如下:
public class Outer { public class Inner { public void display() { System.out.println("Inner class method"); } } public static void main(String[] args) { // 获取匿名Inner对象的哈希码 System.out.println(new Outer().new Inner().hashCode()); // 原调用逻辑 new Outer().new Inner().display(); } }
如果Inner类重写了hashCode()方法,会返回重写后的结果;否则返回基于对象内存地址的哈希码。
2. 使用System.identityHashCode(Object)方法
这个方法会忽略对象自身重写的hashCode(),始终返回基于对象内存地址的哈希码,示例:
public static void main(String[] args) { // 先持有匿名对象引用,再获取哈希码 Outer.Inner anonymousInner = new Outer().new Inner(); System.out.println(System.identityHashCode(anonymousInner)); anonymousInner.display(); // 也可以链式直接调用 System.out.println(System.identityHashCode(new Outer().new Inner())); }
内容的提问来源于stack exchange,提问作者Venkatesh Nambiyar
相关产品推荐
相关产品推荐

