零长度数组的JVM优化

时间:2013-06-10 15:43:46

标签: java arrays

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

2 个答案:

答案 0 :(得分:4)

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

  

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

例如,在以下代码中,不同的线程可以不阻塞地调用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) {
       ...
    }
 }

答案 1 :(得分:1)

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