2_JVM_运行机制

1.jvm 启动流程   

 

2.jvm基本结构  

 

 

pc寄存器:

-每个线程拥有一个pc寄存器

-在线程创建时创建

-指向下一条指令的地址

-执行本地方法时,Pc的值为undefined (未定义的)

 

方法区:

1.保存装载的类信息 

-类型的常量

-字段,方法信息

-方法字节码 

(jdk6:String等常量反正方法区   jdk7:已经将String等常量移到了)

2.通常和永久区关联在一起

 

java堆:

-和程序开发密切相关

-应用系统对象都保存在java堆中

-对分代的GC来说,堆也是分代的

-GC的主要工作区间

复制算法

 

java栈:

-线程私有

-栈由一系列帧组成(因此java栈也叫作帧栈)

-帧保存一个方法的局部变量,操作数据,常量池指针

-每一次方法调用创建一个帧,并压栈

–局部变量表包含参数和局部变量

 

– 函数调用组成帧栈

 

 

public static inttest(int a,int b, int c){

returntest(a,b,c);

}

 

 

 

 

Java没有寄存器,所有参数传递使用操作数栈

 

 

– 栈上分配:

小对象(一般几十个bytes),在没有逃逸的情况下,可以直接分配在栈上

直接分配在栈上,可以自动回收,减轻GC压力

大对象或者逃逸对象无法栈上分配

 

-栈、堆、方法区交互

 

public class Personnel {
private String name;


public Personnel(String name) {
this.name = name;
}


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}

public void sysoName()
{
System.out.println(name);
}

 

}

 

 

public class TestMain {


public static void main(String[] args) {
Personnel a = new Personnel("testa");
Personnel b = new Personnel("testb");


a.sysoName();
b.sysoName();
}
}

 

 

 

3.内存模型

-每一个线程有一个工作内存和主存独立

-工作内存存放主存中变量的值的拷贝

 

当数据从主内存复制到工作存储时,必须出现两个动作:第一,由主内存执行的读(read)操作;第二,由工作内存执行的相应的load操作;当数据从工作内存拷贝到主内存时,也出现两个操作:第一个,由工作内存执行的存储(store)操作;第二,由主内存执行的相应的写(write)操作

每一个操作都是原子的,即执行期间不会被中断

对于普通变量,一个线程中更新的值,不能马上反应在其他变量中

 

如果需要在其他线程中立即可见,需要使用 volatile 关键字

 

 

 

 

 

 

基本结构-

可见性:一个线程修改了变量,其他线程可以立即知道

保证可见性的方法

-volatile

-synchronized(解锁之前,写变量值回主存)

-final 一旦初始化完成 其他线程可见

 

 

 

 

4编译和解释运行的概念

 

解释运行:

-解释执行以解释方式运行字节码

-意思是:读一句执行一句

 

编译运行:

-将字节码编码成机器码

-直接执行机器码

-运行时编码

-编译后性能有数量级的提升

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值