我一直在阅读Java虚拟机指令集,并注意到当使用指令调用标记为同步的方法(例如invokestatic,invokevirtual等)时,由特定的字节码指令来获取接收器上的监视器宾语.类似地,从方法返回时,由方法同步时指令释放监视器的指令.这看起来很奇怪,因为有明确的monitorenter和monitorexit字节码来管理监视器.JVM是否有特殊原因以这种方式设计这些指令,而不是仅仅编译方法以包含适当的monitorenter和monitorexit指令?
java jvm synchronized
java ×1
jvm ×1
synchronized ×1