我注意到有趣的(令我惊讶的)行为:
public void m(){
int primitive=1;
synchronized (primitive) {
}
}
此代码生成以下内容:
int is not a valid type's argument for the synchronized statement
你能解释一下原因吗?
答案 0 :(得分:7)
原语只是一个裸值,没有别的。这是一个原始的整点,它尽可能简单。添加锁是一种开销,即它增加4个字节,而对象的整个头可以是16个字节。
只有对象支持方法并且已同步。
重要的是byte
使用一个字节,但可以锁定的Byte
使用16到24个字节。如果你有一个包含数百万个缓冲区的缓冲区,那么如果你不需要它,那么对锁的支持似乎是浪费。