请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

synchronized原理

老师好,有几个小问题想要请教一下:
1、类似ObjectMonitor和ObjectWait对象也是在堆中创建的吗?不管是hotspot源码中创建的对象还是我们自己创建的对象都是在堆中创建的吗?
2、只有使用重量级锁的时候才生成ObjectMonitor吗?如果对象创建的时候隐式创建ObjectMonitor,那万一没有使用锁,ObjectMonitor会不会占用内存啊?
3、原文中说的是obj区域,为什么不是线程获取到对象的Monitor后进入owner区啊?

正在回答 回答被采纳积分+3

1回答

翔仔 2021-06-11 00:23:49

同学好,1.对象都是在堆中的。堆主要用来存放对象的,栈主要是用来执行程序的
2.ObjectMonitor涉及到synchronized升级到重量级锁的过程。synchronized关键字的执行过程还涉及到锁机制的升级过程,升级顺序为 自旋锁、偏向锁、轻量级锁、重量级锁;只有才升级为重量级锁的时候才会启动monitor机制,并且创建对象
3.同学能详细描述下问题不,看得不是很懂。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信