1.通过java指令启动
2.根据当前路径和系统版本找jvm的配置文件
3.根据配置文件找到jvm.dll文件,为jvm主要实现
4.初始化jvm虚拟机
5.找到main方法运行
方法区:保存装载的类信息:1.类型的常量池(jdk1.7后放入堆中)2.字段方法信息 3.方法字节码。
java栈:线程私有,先进后出,栈里面放的是帧,帧里面放的是一个方法局部变量,常量池的指针,每调用
一次方法创建一个帧,并压栈。
java堆:全局共享。
栈中存放一个局部变量表,表中每一行相当于一个槽位,最多占32个字节,所有Long型要占用两个槽位, 对象引用占用一个槽位。
java没有寄存器,所有参数传递使用寄存器栈。
java栈上分配特点:
1.小对象(几十bytes),由于栈是线程私有,共享对象只能分配到堆上
2.可以自动回收,减轻GC压力
3.大对象无法分配到栈上。
指令重排
a=1,b=2在编译过程中顺序不一定。
保证线程间可见性
1.volatile关键字
2.synchronized关键字
3.final(常量)