日期:2014-05-20  浏览次数:20625 次

关于JVM的64bit和32bit经典问题,大家讨论下,最好有人试验过
JDK里 int型为4个字节长度,到64bit jdk 时还是4字节32bit吗?

另外为什么32bit机器的最大寻址空间为4G,能给个具体的详细的计算公式吗?



------解决方案--------------------
java里面的int都是32个bit位
64位说的是操作系统的字长
32位的寻址空间就是2的32次方,就是4G

------解决方案--------------------
java中基本类型的长度都是固定的,不随平台改变而改变,不然还要虚拟机干嘛!
------解决方案--------------------
2^32 byte not bit
------解决方案--------------------
数值类型的范围是永远不会变更的。不过是 32 位,64 位抑或是 128 位,Java 中的 int 表示的值必须是 32 位。

但是 JVM 的为了能更高效的实现,在系统中占有的位数就是不一定的,一般来说 int 在 32 位系统中占用 32 位,而在 64 位系统中,占用 64 位,但是只用了 32 位。

这就好比 boolean 类型与 int 类型占用的空间是一样的,虽然只有 true 和 false 两个值,但是也占用了 int 的位宽。
------解决方案--------------------
2^10 = 1024 = 1k
2^20 = 1024 * 1024 = 1M
2^30 = 1024 * 1024 * 1024 = 1G
2^40 = 1024 * 1024 * 1024 * 1024 = 1T
2^50 = 1024 * 1024 * 1024 * 1024 * 1024 = 1P
2^60 = 1024 * 1024 * 1024 * 1024 * 1024 * 1024 = 1E

k, M, G, T, P, E 是国际单位词头,每一级相差 1000 倍,但是在计算机系统中改为每一级相差 1024 倍。

2^32 = 2^30 * 2^2 = 1G * 4 = 4G
2^64 = 2^60 * 2^4 = 1E * 16 = 16E

我们现在能接触到最大的单位也就是 T 了,但是对于 google 来说每天处理的数据量就是以 P 为单位的。
------解决方案--------------------
每天回帖就可得10分
------解决方案--------------------
巩固基础了