成员变量、局部变量在java中的存放位置

本文深入探讨了Java内存模型中局部变量与成员变量的区别,分析了线程共享成员变量时可能产生的数据安全问题,以及从Java内存模型角度解释了数据不一致的根本原因。

成员变量,线程共享
以基本数据类型或引用数据类型为成员变量,变量值都是在堆中存放的。

局部变量,线程私有

  • 基本数据类型,参数和参数值在Java虚拟机栈中存放的。
  • 引用数据类型,参数在Java虚拟机栈中存放的,参数值是对象实例,在堆中存放的。

顺便解释下,多线程环境下为什么会产生数据安全问题?
局部变量是线程私有,所以不会产生数据安全问题。成员变量是在堆中存放的,线程共享的,有数据安全问题。
从Java内存模型角度来看,线程有本地的工作内存,里面存放的是从主内存中拷贝来的变量副本,变量修改后,会先写入到工作内存中,主内存中不会马上更改,这是造成数据安全问题的主要原因。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值