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, 还有其他内存形式(可参考<https://www.ibm.com/support/knowledgecenter/en/SSYKE2_8.0.0/com.ibm.java.80.doc/diag/problem_determination/aix_mem_heaps.html

) 简单而言,还有一种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就采用这种技术,可以绕过了内存限制)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容