java日记二

 Oracle收购了sun(Hotspot)和BEA(JRockit),三大虚拟机还有IBM的J9,移动数码设备使用Android系统和Dalvik虚拟机。

JRuby,Groovy,PHP等语言可以运行在JVM上,JPHP负责将PHP源代码编译为JVM字节码,使其能够运行在JVM上。

java虚拟机 除了堆栈,还可以使用直接内存,即通过native方法申请空间,例如nio的缓冲区。

对象头中分为三部分,MarkWord,类型指针,数组长度。其中MarkWord中的hashcode,因为对象分配空间后会全部初始化为该类型的0值,所以默认为0,如果调用object的hashcode方法,则会使用虚拟机提供的方法get_next_hash()方法产生一个哈希值,并写入对象头,如果调用重写后的hashcode方法,则会覆盖object的hashcode方法,从而不会有写入对象头的操作。因此对象头任是原来的值。

对象空间分为对象头,数据,对其空间。

无锁(通过cas,一个CPU指令cmpxchg指令可保证操作原子性),偏向所(锁标志为01,无锁状态,偏向所标志为1,MarkWord的hashcode改为线程id加2位的时间戳,如果有新的线程竞争锁,拥有线程已经不存在则通过cas直接获取偏向锁,否则升级为轻量级锁,由java虚拟机来控制执行,首先会在拥有偏向锁的线程会在全局安全点的地方停下执行,在线程中建立锁记录lock record,把MarkWord拷贝到锁记录中,通过cas使对象头指向lock record,然后将lock record中的owner指向对象的MarkWord,并将对象的锁标志位设置为00),轻量级锁(锁标志位为00,升级为轻量级锁后,竞争锁的线程通过自选等待,如果超过一定次数或者有第三个线程到来,则升级为重量级锁,阻塞线程)

 

java card:支持Java小程序(Applets)运行在小内存设备(如智能卡)上的平台。智能卡,比如银行卡,不是以前的磁条卡,手机上的SIM电话卡都是智能卡,有接触和无接触两种,无接触使用射频提供电源,智能卡分为 CPU,RAM随机存储器,ROM只读存储器,只读存储器中存放COS操作系统,负责数据加密与解密、鉴别与核实和文件访问的安全控制等等,是基于linux的闭源操作系统,应用于个人电脑、智能掌上终端、机顶盒、智能家电等。在COS系统中装有Java Card VM虚拟机系统,我们写的Applet程序通过Register向注册,所有的Applet未激活,COS系统根据指令启动相应的Applet处理,调用process方法传入apud做相应的处理。Applet小程序并不一定会有界面,例如智能卡。applet还可以镶嵌在支持的浏览器上,也可以通过AppletView启动applet程序,此处是有界面的。

上一篇:java并发之 Synchronized关键字 详详详解


下一篇:java中的synchronized只是重量级锁吗?聊一聊synchronized锁升级流程