2008年2月19日星期二

JVM specification Notes(1)

jvm 规范:
jvm是一个抽象机。与具体实现没有直接联系。
jvm支持两种数据类型:原生类型以及引用类型
floating-point,参考ieee754标准."NaN" - Not a Number.
boolean型,包括关系操作以及逻辑操作.它与其它原生类型不存在直接转换
引用类型:有三种,class类型,接口类型,以及数组类型,对象是动态创建的类或数组实例.
类实例创建的两个途径:newInstance通过Class,或通过class实例的创建表达式
对象在heap中创建,在没有针对它的引用时,被垃圾回收。对象占用的空莘不能通过显示的语言调用进行回收。
任何一个对某对象的引用,进而改变该对象,新的状态会让所有引用该对象的引用看到.
每个对象都有一个相联锁(associated lock),使用synchronized methods来表示,或者synchronized语句.
引用类型形成一个层次结构. Object类型可以拥有任意对象的引用(类实例或者数组的实例)
变量类型:
 类变量, 在class声明里采用static关键字,或在interface声明里可不带static关键字.这种类型变量在类或接口装载的时候就被初始化为默认值,当类unload时,这些变量自然会exit.
 实例变量,在class声明当中,不带关键字static,如果class T有一个实例变量a,则a会在每个T类型或其子类新创建的T实例中创建,当它所对应的对象不再被引用,在所有必要的终结操作完成以后,它就会退出生命期。
 Array,未使名变量,无论新对象何时创建,初始化时都带有默认值。当它不再被引用时,则生命期结束。
 传递给方法的参数变量值,对方法声明中的每个参数,新的参数变量会在方法调用的时候创建. 当方法体结束时,参数变量生命期结束。
 构造函数参数,与方法参数变量雷同
 异常句柄参数变量,在catch块结束时,生命期结束
 局部变量,只有在它被执行的时候才被初始化.
变量的初始化值:
 class, 实例变量,array,初始化成它创建时候的默认值 
 byte, short, int, long(0L), float(0.0f), double(0.0.), char('\0000')
 boolean(false)
 reference type: null
 method parameter, 与对应的参数类型一致
 local变量,在使用之前,必须显示地给定一个值或者初始化或者赋值.
    type是一个编译期概念,而变量或者表达式都有自己的type,对象或数组没有type,但是拥有自己的class.
    每个array都有自己的class, array的class名字比较奇怪,并且不是合法的标识,一个int数组,名字为"[I".
    jvm退出:在下面两个条件之一成立时
 所有非daemon线程终结时
 某些线程调用Runtime或者System的exit方法,并且exit被security manager允许时.
        当然,可以调用System的runFinalizersOnExit(true)方法强制在exit之前执行所有 class的 finalize方法.默认情况下,是不会调用的.
chapter 3.
    类型和值的返回地址, returnAddress由jsr, ret, jsr_w指令使用.指向jvm指令的opcode的指针.
    boolean,没有专门的类型来处理,直接使用int来代替,而对boolean数组,则使用指令baload和bastore来处理.jvm使用1表示true, 0表示false.
    reference type.
    运行时数据区,3.5.1(***)

没有评论:

发表评论