JVM同步浅析

(所有类的实例或数组,一种实现:分为句柄池和对象池(方便对象移动改变,但有两个指向),对象的引用就是指向句柄池,句柄池有两部分:一个是对象实例;一个是方法区中类的信息。对象池,当然放的是对象实例。第二种实现:直接指向一组数据,数据中包含所有-对象实例和方法区中类的信息)

 

方法区

(被装载类型的信息,如字段信息,方法信息,除常量外的类属性,classLoader的引擎,class类的引用)

 

(jvm会为每个线程分配一个栈,栈是分为栈帧,每调用一个方法就压入一个新栈帧,作为当前帧,使用)

 

栈帧

(栈帧由局部变量区,操作数栈,栈帧数据区组成。局部变量区,操作数栈都是有一个以字长为单位的数组组成

局部变量区是用索引来访问,操作数栈有压栈出栈操作调用。栈帧包含一些栈帧常量池,异常派发机制)

java的堆和方法去是所有线程共享的,栈所属一个线程,他们的实际物理空间都可以不连续,分配的物理空间

大小一般由方法区中的信息决定。这里栈一般分配到新生代E 的1%。

 

java通过监视器机制实现同步,堆和方法区是线程共享的,栈是一个线程独有的。

监控过程未:

 

进入monitor

获得monitor

持有monitor

释放monitor

离开monitor

 

在功能上,同步分为两方面:互斥和协作

互斥是用只允许一个进程计入监控器区域,其他需要在等待区实现的。

协作是用wait notify实现

每个类和对象都有一个监控器。

 

 

对象锁

重入性,jvm维护一个计数器,当线程获得锁,记录为1,只允许这个线程加锁。当计数器为0时,表示没有对象持有锁。

java内部锁 synchronize 

在进入同步块时,进入块时调用monitorenter 出同步块调用monitorexit

同步方法 , 则在解析方法符号时,判断出需要调用对象锁(如果是类方法,就调用类锁)

 

java包下的一些好东西

http://rdc.taobao.com/team/jm/archives/414

在贴一个将lock的

http://suo.iteye.com/blog/1331312

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值