由于特定类型的所有零长度数组都相同,JVM是否优化了零长度数组的分配,以便为所有此类分配使用一个共享实例?
答案 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
始终会创建一个新对象。空数组是不可变的,可以使用缓存的实例进行优化。但这是程序员实施此优化的职责。