虚拟机学习笔记2


class Lava{

private int speed = 0;

void flow(){

}

}

class Volcano{

public static void main(String args[]){
Lava lava = new Lava();
lava.flow()
}

}


[size=medium]学习后,理解的执行过程:[/size]
[list=1]
[*]虚拟机找到Volcano的class文件,提取里面的二进制文件到方法区。

[*]执行保存在方法区的字节码,开始main方法。此时,Lava类还没有被加载,等到需要时,才会加载。

[*]为常量池中的类分配内存,发现第一个是Lava类的一个符号引用,[color=red]这个符号引用是com/test/aaa/Lava 这种类型的表示方式[/color],仅仅是个字符串,检查方法区,发现Lava类尚未加载。查找Lava.class文件,读取二进制信息到方法区。

[*]以一个[color=red]指向方法区[/color]的直接引用替换掉上面字符串“Lava”,以后就可以用这个指针来访问Lava类了,这就是所谓的常量池解析。把常量池中的符号引用替换成直接引用。

[*]终于到new这里了,虚拟机为新的Lava对象分配内存,这时候,又需要方法放到方法区里的Lava类的信息了,通过刚才的指针,从里面找出:创建这个类需要多少内存呢?(这个由虚拟机的设计者决定)。好了,在内存堆里分配一块给Lava对象。然后初始化属性speed,如果有超类,且有实例变量,超类也会初始化。

[*]可以执行方法了。把Lava对象的引用压到栈中。此时,算是执行完main方法的第一行了。接着就是执行方法。这个下次再说。嘿嘿。

[/list]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值