由于特定类型的所有零长度数组都是相同的,JVM是否优化了零长度数组的分配,以便为所有此类分配使用一个共享实例?
发布于 2013-06-10 23:43:46
不是的。它可能不会这样做,因为每个创建的零长度数组对象都可以用作不同的同步监视器。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) {
...
}
}发布于 2013-06-11 00:19:15
new总是创建一个新对象。空数组是不可变的,可以使用缓存的实例进行优化。但这是程序员的职责来实现这种优化。
https://stackoverflow.com/questions/17027761
复制相似问题