int的大小为32位,long/double为64位。这些尺寸在上会保持不变吗?
long/double上的操作会是64位处理器/JVM上的原子操作吗?The Oracle Java教程说
读和写对于引用变量和大多数原始变量(除了长和双)都是原子的。
这个语句与jvm/处理器体系结构有任何关系吗?谁能解释一下。
3.最后,如果我使用64位jvm和处理器,我将能够对双/长原子进行读写吗?
发布于 2012-03-01 06:56:55
是的,32位和64位JVM的大小是相同的.在Java中,分配不一定是原子的,无论是长的还是双的。原子赋值,仍然不能保证来自另一个线程的可见性。因为线程被允许对内存中的变量进行“阴影”,所以即使是对变量的原子分配也不一定会通过内存写入主内存(但是当主内存被更新时,就会以原子的方式完成)。在从两个或多个线程访问共享状态时,如果希望一个线程始终看到另一个线程的更改,则必须始终使用某种类型的同步屏障。
发布于 2012-03-01 08:03:25
唯一改变大小的数据类型是引用。这些可以是32位或64位。在所有64位JVM上引用都是64位的,这是一种常见的误解,并且将在那里使用更多的内存。在Sun/Oracle 6、update 23和更高版本上,使用32位引用(即堆的大小小于32 GB )是默认的。
注意:64位引用是原子的,表明这些平台上的long和double访问也可以是原子的。(虽然并不保证在所有系统上,尤其是32位JVM)
发布于 2012-03-01 06:54:31
根据JLS的说法:
积分类型为字节、短、int和长,其值分别为8位、16位、32位和64位有符号的两个补整数和char,其值为16位无符号整数,表示UTF-16码单元。
浮子和双倍也是如此。
没有提到32位/ 64位处理器/实现jvm,因此无论是32位还是64位,都不会进行修改。
https://stackoverflow.com/questions/9511836
复制相似问题