零长度数组的JVM优化

由于特定类型的所有零长度数组都相同,JVM是否优化了零长度数组的分配,以便为所有此类分配使用一个共享实例?

不可以。它可能不会这样做,因为每个创建的零长度数组对象都可以用作不同的同步监视器。 甲骨文 :

同步是围绕一个称为内部锁或监视器锁的内部实体构建的……每个对象都有一个与之关联的内部锁。

例如,在以下代码中,不同的线程可以在不阻塞的情况下调用x.methodA()x.methodB()

  private final int[] a; private final int[] b; Ctor(int n) { a = new int[n]; b = new int[n]; } public final methodA() { synchronized(a) { ... } } public final methodB() { synchronized(b) { ... } } 

new总是会创建一个新对象。 空数组是不可变的,可以使用缓存的实例进行优化。 但这是程序员实施此优化的职责。