double多少字节,数据类型double占几个字节

前言JVM中对long的操作是不是原子操作?双精度实数,占用字节8。有效数字15~16(因为二进制转十进制问题)。数值范围-1.7*10负308次方~1.7*10的308次方。当有效数字全部是整数时,

前言

JVM中对long的操作是不是原子操作?

双精度实数,占用字节8。有效数字15~16(因为二进制转十进制问题)。数值范围-1.7*10负308次方~1.7*10的308次方。当有效数字全部是整数时,即整数有15~16位。C语言中,输出double类型(双精度实型)以及float类型(单精度。

为什么对long的操作不是原子的?

在硬件,操作系统,JVM都是64位的情况下呢?

double多少字节

java中基本类型中,long和double的长度都是8个字节,32位(4字节)处理器对其读写操作无法一次完成,那么,JVM,long和double是原子性的吗?

JVM中对long的操作是不是原子操作?

8个。double是C语言的双精度浮点类型,对于其占字节数,C语言规范中,并没有明确规定其所占空间,只是要求double类型的整数部分的最小表示范围为1.0E-37到 1.0E+37,小数部分至少要能精确到小数点后10位。所以在实现中。

首先,通过一段程序对long的原子性进行判断。测试程序如下:

数据类型double占几个字节,public class LongAtomTest implements Runnable { private static long field = 0; private volatile long value; public long getValue() { return value; } public void setValue(long value) { this.value = value; } public LongAtomTest(long value) { this.setValue(value); } @Override public void run() { int i = 0; while (i < 100000) { LongAtomTest.field = this.getValue(); i++; long temp = LongAtomTest.field; if (temp != 1L && temp != -1L) { System.out.println("出现错误结果" + temp); System.exit(0); } } System.out.println("运行正确"); } public static void main(String[] args) throws InterruptedException { // 获取并打印当前JVM是32位还是64位的 String arch = System.getProperty("sun.arch.data.model"); System.out.println(arch+"-bit"); LongAtomTest t1 = new LongAtomTest(1); LongAtomTest t2 = new LongAtomTest(-1); Thread T1 = new Thread(t1); Thread T2 = new Thread(t2); T1.start(); T2.start(); T1.join(); T2.join(); }}

可以看到,程序中有两条线程t1,t2;t1,t2各自不停的给long类型的静态变量field赋值为1,-1;t1,t2每次赋值后,会读取field的值,若field值既不是1又不是-1,就将field的值打印出来

如果对long的写入和读取操作是原子性的,那么,field的值只可能是1或者-1

运行结果如下

32-bit出现错误结果-4294967295运行正确

为什么对long的操作不是原子的?

JVM内存模型中定义了8中原子操作:

lock:将一个变量标识为被一个线程独占状态

unclock:将一个变量从独占状态释放出来,释放后的变量才可以被其他线程锁定

read:将一个变量的值从主内存传输到工作内存中,以便随后的load操作

load:把read操作从主内存中得到的变量值放入工作内存的变量的副本中

use:把工作内存中的一个变量的值传给执行引擎,每当虚拟机遇到一个使用到变量的指令时都会使用该指令

c语言中double(双精度浮点型)是计算机使用的一种数据类型。double(双精度浮点型)使用 64 位(8字节) 来储存一个浮点数。 它可以表示十进制的15或16位有效数字,其数值范围为-1.79769313486232E308 到1.

store:把工作内存中的一个变量的值传递给主内存,以便随后的write操作

write:把store操作从工作内存中得到的变量的值写到主内存中的变量

其中,与赋值,取值相关的包括 read,load,use,assign,store,write

按照这个规定,long的读写都是原子操作,与我们的实践结果相反,为什会导致这种问题呢?

For the purposes of the Java programming language memory model,a single write to a non-volatile long or double value is treated as two separate writes: one to each 32-bit half. This can result in a situation where a thread sees the first 32 bits of a 64-bit value from one write,and the second 32 bits from another write.

Writes and reads of volatile long and double values are always atomic.

Some implementations may find it convenient to divide a single write action on a 64-bit long or double value into two write actions on adjacent 32-bit values. For efficiency's sake,this behavior is implementation-specific; an implementation of the Java Virtual Machine is free to perform writes to long and double values atomically or in two parts.

Implementations of the Java Virtual Machine are encouraged to avoid splitting 64-bit values where possible. Programmers are encouraged to declare shared 64-bit values as volatile or synchronize their programs correctly to avoid possible complications.

从规定中我们可以知道

对于64位的long和double,如果没有被volatile修饰,那么对其操作可以不是原子的。在操作的时候,可以分成两步,每次对32位操作。

如果使用volatile修饰long和double,那么其读写都是原子操作

double占8个字节(64位)存空间,最多可提供16位有效数字,小数点后默认保留6位。如全是整数,最多提供15位有效数字。学习,是指通过阅读、听讲、思考、研究、实践等途径获得知识和技能的过程。学习分为狭义与广义两种:狭义。

对于64位的引用地址的读写,都是原子操作

在实现JVM时,可以自由选择是否把读写long和double作为原子操作

推荐JVM实现为原子操作

从程序得到的结果来看,32位的HotSpot没有把long和double的读写实现为原子操作。在读写的时候,分成两次操作,每次读写32位。因为采用了这种策略,所以64位的long和double的读与写都不是原子操作。

在硬件,操作系统,JVM都是64位的情况下呢?

64-bit运行正确运行正确

结果表明,在64bit的虚拟机下,long的处理是原子性的。

上一篇 2023年03月27 01:41
下一篇 2023年03月27 23:59

相关推荐

  • 怎么样重装系统,u盘怎么样重装系统

    u盘怎么样重装系统,小编经常感叹如今互联网功能的发展,还记得零几年的时候电脑的问题很难自己去解决,而如今重装系统都可以轻松在家自己搞定,小编前几天就更新了windows8系统,快来看看具体的电脑系统重

    2023年02月14 237
  • 流量卡一个月多少钱

    流量卡作为特殊商品,在申请后运营商会进行严格的审核,如果审核不通过将不予发卡。流量卡太坑人了,大家都知道,某东、某淘甚至还有不少的正规的网站都可以申请流量卡,在这里要重点提一句,不管是在哪个平台下单,

    2023年03月28 266
  • wps怎么画线,wps怎么随意画线

    我们在利用WPS演示文稿进行日常办公时,wps怎么随意画线,经常需要制作各种各样的幻灯片,在幻灯片当中,插入形状可以说是必不可少的,通常我们会在幻灯片当中插入直线,但是画过直线的朋友们都知道,直线并不

    2023年02月14 276
  • 阿法蛋机器人多少钱,阿I法蛋智能机器人多少钱

    阿I法蛋智能机器人多少钱,淘云科技是一家专注于“人工智能+儿童”,提供面向儿童的智能硬件、服务和平台的公司。其前身是科大讯飞全资子公司,2015年初开始独立运作。9月28日,讯飞淘云全新产品阿尔法蛋•

    2023年03月18 288
  • 怎么改网络密码,手机怎么修改自家wifi密码

    在这个发展迅速的网络时代,人们对无线网的需求越来越大,手机怎么修改自家wifi密码,每家每户都离不开网络,比如看电视,看视频,聊天,看小说,看微博等都离不开网络。WiFi信道分析图第二步我们登录自己家

    2023年02月12 247
  • 创维电视密码多少,电视机怎么设置频道顺序

    家用光猫常用超级密码:电信:帐号:telecomadmin密码:nE7jA%5m或admintelecom移动:帐号:CMCCAdmin密码:aDm8H%MdA联通:帐号:CUAdmin密码:CUAd

    2023年03月03 246
  • 挖掘机要多少钱,小型挖掘机要多少元

    【品牌机型】神钢SK210LC-8【出厂时间】不详【小时数】11472h【购买时间】2023年2月5日【设备所在地】广西梧州市【设备成交地】四川成都市【成交价格】8.35万(数据来自于铁甲二手机数据中

    2023年03月15 257
  • 怎么注册邮箱地址,手机怎么注册邮箱地址怎么填写

    很多职场人士都用过邮箱,手机怎么注册邮箱地址怎么填写,都是企业已经开通好的,员工直接拿过来用就行,那你知道TOM企业邮箱开通流程是什么样的吗?邮箱后缀格式在注册时该如何填写,下面为大家聊聊如何创建一个

    2023年02月14 299
  • 电视40寸长宽是多少厘米,40寸长度是多少厘米

    数据显示,2015年至2021年,国内彩电市场上彩电产品的平均尺寸从44.5英寸增长到54.4英寸,单位面积售价却从75.58元/英寸下降至61.79元/英寸。绝大多数电视机品牌在不断降价。小米在20

    2023年03月17 273
  • icloud怎么备份照片,icloud怎么备份部分照片

    本内容来源于@什么值得买APP,观点仅代表作者本人|作者:我是王小浪前情提要:由于网上看到的所有教程,几乎没一个靠谱的,全部都是小白自行捣腾出来的步骤,评论里问题很多,看得让人心疼,所以趁娃子睡了,赶

    2023年05月11 295
  • 怎么切换独显,dell双显卡如何只开独立显卡

    进入2022年,大部分厂家的高性能游戏本均已支持独显直连功能。根据笔者之前的实际测试来看,虽然独显直连的功能是一致的,但是各个品牌开启的方法并不一致,有的机型是在主控中心里面开启,dell双显卡如何只

    2023年02月13 213
  • 怎么订外卖

    今天是五一假期第一天相信许多人已经坐上高铁开启了期待已久的旅程不过,你知道在列车上还能品尝沿线地区的美食外卖吗?只需要打开铁路12306APP在手机上简单操作就可以预订沿途品牌餐食并享受送餐到座服务往

    2023年05月09 281
  • 三星s5外壳多少钱,三星手机外壳多少钱

    IT之家12月22日消息,在今日晚间的vivoS16系列发布会上,vivoS16系列手机正式发布,售价2499元起。vivoS16系列拥有三款配色,三星手机外壳多少钱,厚7.36mm,重182g,主打

    2023年04月07 230
关注微信