java 执行基础运算时内存调度过程

当我们执行i=i+1时;有没有想过i是怎么执行+1操作的,他的过程是什么?
我查过一些资料,虽然不是很深,但还是要分享一下我的理解。

jvm的所有运算操作都是要依赖cpu进行的,当java中执行i=i+1时,首先是jvm将i=i+1操作的过程生成cpu能执行的指令,然后cpu来执行i=1+1的操作。

  1. cpu将i所在的内存中的值读到高速缓存区中。
  2. 然后再从高速缓存区读取i的值到主存中。
  3. 然后cpu执行加运算将主存中i的值加1。
  4. 然后cpu加主存中i修改后的值同步到高速缓存区中。
  5. 最后将高速缓存区的数据刷新到i所在的Java内存中。

执行图解:

这里写图片描述

在多线程下,这些操作可能会照成数据丢失。

例如两个线程同时执行i=i+1;首先同时读i的值到高速缓存区中,然后同时执行i+1操作,假如i的初始值为1,执行i=i+1后,最终两个线程会将i值(即为2)写入到java内存中。这就造成了一个线程的加运算丢失。最终真实结果应为3.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值