读书人

JVM 编程(Oolong)学习札记

发布时间: 2012-08-29 08:40:14 作者: rapoo

JVM 编程(Oolong)学习笔记
近期学习Engel的《Programming for the Java Virtual Machine》。这本书实际上讲的是JVM原理和机制,只不过用一种汇编语言的形式来展开讲解。Oolong是大牛Engel先生自己发明的一种基于JVM的汇编语言,按他自己的介绍,Oolong实际只是JVM bytecode的一个易于理解的教学版本,其本身似乎并不具备什么开发应用的价值。

由于对jvm本身已经有一定的熟悉,所以这里没有什么详细的笔记可做,仅就书中一些比较迷惑的地方做一些说明。


数组操作:
对数组元素的写操作,书中有个例子在1.5以上的jvm中是错的:


经过试验发现,数组元素替换的压栈顺序错了,正确的应该如下:
;最初,lock_count = 0aload_0monitorenter  ;mainLock()上锁, lock_count = 1aload_0monitorenter  ;subLock1()上锁, lock_count = 2;做点什么1aload_0monitorexit   ;subLock1()解锁, lock_count = 1aload_0monitorenter  ;subLock2()上锁, lock_count = 2;做点什么2aload_0monitorexit   ;subLock2()解锁, lock_count = 1aload_0monitorexit   ;mainLock()解锁, lock_count = 0

可见,每执行一次monitorenter,lock_count就增加1;每执行一次monitorexit,lock_count就减少1。
JVM规定,只有当lock_count = 0 时,别的线程才有机会获得锁。因此,在subLock1()和subLock2()之间不可能有其它的线程介入,mainLock()与subLock1()和subLock2()所持都是同一个锁。

读书人网 >编程

热点推荐