32bit & 64bit

前记: 算是一些冷知识,毕竟接触32bit的机会越来越少了;


作为JAVA程序员应该都知道当32bit的JRE最大支持的内存不能超过2G; 这次就深入理解了其中的一些细节。

  • 32bit & 64bit 是属于OS层次的概念, 它代表CPU在内存中的寻址空间, 比如32bit 简单换算一下, 2^32 = 4 * 1k * 1k * 1k = 4G大约就是4G的寻址空间; 而64bit 就是2^64 很简单可以看出这是一个很夸张的数字, 而实际目前的OS也不支持一个程序/进程可以使用这么大的空间;
  • 上述的计算只是理论值, 等于是理论上32bit & 64bit可以支持进程的内存上限(只是在标准CPU寻址模型的基础上而言,最后会提到PAE技术),具体支持多大的内存,还受到CPU 和 OS厂商的限制; 比如64bit 在windows最大可用内存是128G;
  • 实际在JAVA中32bit 的java实际我们可以设置的Xmx(java max heap size)只有1.4-1.6G,远远达不到4G; 问题是在于JAVA的内存除了我们普通意义上的java heap, 还有其他内存形式(可参考

) 简单而言,还有一种native/ system heap, 它不受到JVM的管理(没有垃圾回收机制), 它的实现与OS相关; native/system heap里可保留的比如:
* AWT / SWING相关的Motif objects(这些显示风格的内容与OS相关可以理解);
* 对JAR ZIP读写所需要的内存空间;
* 线程的栈空间;
* 实时编译所空间;

  • 程序在32bit下想要使用超过4G以上内存空间,依然存在办法;
    • 采用多进程(比如chrome, chrome采用多进程应该不是为了这个好处吧)
    • PAE(physical address extension)技术(需要CPU支持,同时操作系统允许; windows server 2003 32bit就采用这种技术,可以绕过了内存限制)

你可能感兴趣的:(32bit & 64bit)