首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >32/64位jvm上java原语的大小?

32/64位jvm上java原语的大小?
EN

Stack Overflow用户
提问于 2012-03-01 06:49:48
回答 5查看 20.7K关注 0票数 22
  1. int的大小为32位,long/double为64位。这些尺寸在上会保持不变吗?
    1. 32/64位JVM
    2. 32/64位处理器

  1. 如果是,那么long/double上的操作会是64位处理器/JVM上的原子操作吗?

The Oracle Java教程说

读和写对于引用变量和大多数原始变量(除了长和双)都是原子的。

这个语句与jvm/处理器体系结构有任何关系吗?谁能解释一下。

3.最后,如果我使用64位jvm和处理器,我将能够对双/长原子进行读写吗?

EN

回答 5

Stack Overflow用户

发布于 2012-03-01 06:56:55

是的,32位和64位JVM的大小是相同的.在Java中,分配不一定是原子的,无论是长的还是双的。原子赋值,仍然不能保证来自另一个线程的可见性。因为线程被允许对内存中的变量进行“阴影”,所以即使是对变量的原子分配也不一定会通过内存写入主内存(但是当主内存被更新时,就会以原子的方式完成)。在从两个或多个线程访问共享状态时,如果希望一个线程始终看到另一个线程的更改,则必须始终使用某种类型的同步屏障。

票数 16
EN

Stack Overflow用户

发布于 2012-03-01 08:03:25

唯一改变大小的数据类型是引用。这些可以是32位或64位。在所有64位JVM上引用都是64位的,这是一种常见的误解,并且将在那里使用更多的内存。在Sun/Oracle 6、update 23和更高版本上,使用32位引用(即堆的大小小于32 GB )是默认的。

注意:64位引用是原子的,表明这些平台上的longdouble访问也可以是原子的。(虽然并不保证在所有系统上,尤其是32位JVM)

票数 5
EN

Stack Overflow用户

发布于 2012-03-01 06:54:31

根据JLS的说法:

积分类型为字节、短、int和长,其值分别为8位、16位、32位和64位有符号的两个补整数和char,其值为16位无符号整数,表示UTF-16码单元。

浮子和双倍也是如此。

没有提到32位/ 64位处理器/实现jvm,因此无论是32位还是64位,都不会进行修改。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9511836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档