重排序和数据依赖性

重排序:指编译器和处理器为了优化程序性能对指令进行重排序的一种手段。Java内存模型中,允许编译器和处理器对指令进行重排序,但是重排序可以保证最终执行的结果与程序顺序执行的结果一致。并且只会对不存在数据一致性的指令进行重排序。

int a = 1; // 1
int b = 2; // 2
int c = a + b; // 3

class Demo{
	int a = 0;
	boolean flag = false;
	
	public void write(){
		a = 1;	//1
		flag = true; //2
	}
	public void read(){
		if(!flag){
		a = 2;
		}
	}
}

数据依赖性:如果两个操作访问同一个变量,且这两个操作有一个是写操作,此时这两个操作之间就存在数据依赖性。

1.写---读

a = 1;
b = a;

2.写---写

a = 1;
a = 2;

3.读--写

a = b;
b = 1;

编译器处理器在重排序时,会遵循数据依赖性,编译器和处理器不会改变存在依赖关系的两个操作的执行顺序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值