1.我们所说的64位CPU架构指的是64位内存扩展技术,它是32CPU架构的一个扩展,且兼容原来的架构。它通过增加CPU的运算位宽扩展增加CPU和内存之间的位宽,从而让系统支持更大容量的内存,64位最大支持64G。
2.处理器模式:传统32位模式:安装32位操作系统,安装32位硬件驱动程序,安装32位应用程序。目前大多数人的处理器是Intel 64,安装了32位操作系统,程序运行良好,包括16bit和32bit程序。
兼容模式:操作系统和硬件驱动程序都是64bit,计算机允许64bit操作系统下不需要预编译就可以运行大多数传统的32bit应用程序,这个传统的32位模式基本相同,32位应用程序仍然只能访问4G内存,但此限制只在进程级,而不在系统级。
64位模式:必须要有64位的操作系统,驱动程序,应用程序三者合作,这时操作系统无法运行32位程序,兼容性最差,但充分发挥64位架构的优势。
3.总结:32位还是64位的根本取决于CPU的架构,之后是操作系统,驱动程序,应用程序的32位,64位版本之分。如果操作系统是32位,那么驱动程序必须是32位,应用程序是32位;如果操作系统是64位,那么驱动程序必须是64位,应用程序可以是32位,也可以是64位。
4.64bit计算的两大优点:可以进行更大范围的整数运算;可以支持更大的内存。
5.64位好处体现的应用:加密程序:大多数加密算法基于大量的整型数据,适合在64位通用寄存器和运算器处理;科学计算:整型数据的科学计算将从64位处理中受益,浮点运算不会从中受益,因为即便是32位处理器,浮点寄存器也已经达到了80位到128位;需求超过4G的应用程序:如数据库服务器,图形处理和视频压缩相关应用。
6.64位虚拟内存空间理论上最高可以支持直接访问2EB,不过当前的所谓64位处理器并不能真正做到,原因很简单,目前还没有机器支持那么大的物理内存。EM64T提供40位寻址能力,最大支持到1TB内存。
7.JVM32bit和64bit的区别:
1目前只有server VM支持64bit JVM,client不支持64bit JVM。
2 .The Java Plug-in, AWT Robot and Java Web Start这些组件目前不支持64bit JVM
3.本地代码的影响:对JNI的编程接口没有影响,但是针对32-bit VM写的代码必须重新编译才能在64-bit VM工作。
4.32-bit JVM堆大小最大是4G, 64-bit VMs 上, Java堆的大小受限于物理内存和操作系统提供的虚拟内存。(这里的堆并不严谨)
5.线程的默认堆栈大小:在windows上32位JVM,默认堆栈最大是320k 64-bit JVM是1024K。
6.性能影响:
(1)64bit JVM相比32bit JVM,在大量的内存访问的情况下,其性能损失更少,AMD64和EM64T平台在64位模式下运行时,Java虚拟机得到了一些额外的寄存器,它可以用来生成更有效的原生指令序列。
(2)性能上,在SPARC 处理器上,当一个java应用程序从32bit 平台移植到64bit平台的64bit JVM会用大约 10-20%的性能损失,而在AMD64和 EM64T平台上,其性能损失的范围在0-15%.
7.Sun的官网上写着,当一个java应用程序从32bit 平台移植到64bit平台的64bit JVM上,应用会有性能损失,相信很多人都会不解。至今把Java从32位移到64位带来的只是性能的下降。
8.Java虚拟机(JVM)是一个软件规范,其32位与64位版本性能有所不同,但它们都包括JIT编译器和垃圾回收功能(GC),其性能关键在JIT编译器和垃圾回收功能的执行效率上。JIT编译器实现了程序执行之前Java字节码到硬件机器码的动态翻译,其背后的思想在于,相比Java源代码,字节码更小也更容易编译,但付出的代价是需要在Java字节码编译为机器码时花上一点时间,但与直接把Java源代码编译为机器码相比,时间还是少得多的。在32位与64位的JVM中,相应的JIT在把Java字节码编译为最终的机器码时,所花的时间稍微有所不同,但还能进行一些优化;另外,在IBM与Sun这两个版本的客户端与服务端程序上,总体性能也会有所不同。 垃圾回收会收回对象不再需要使用的内存,它必须被经常执行以释放对象不再访问的Java堆。由于在32位与64位平台上,Java堆中的数据大小会有所变化,所以会因为32位与64位JVM的性能差异,然而指针越大越GC管理越困难,导致相应垃圾回收的性能也会有所不同。
9.如何选择JVM32bit和JVM 64bit
1、你的应用程序是否需要超过2GB的Java Heap来获取更优的性能呢? Yes = 64-Bit No = 32-Bit 如何判断你的应用需要多大的Java Heap呢?可以通过计算平均的Heap使用情况来确定。
2、你的应用程序是否需要高精度的科学计算进行统计、安全、加密等等? Yes = 64-Bit No = 32-Bit 3、你的应用程序只需要小于2GB的Java Heap?(与第1点类似) Yes = 32-Bit on 64Bit OS No = 64-Bit 4、你的应用程序并不需要64位的特性,但是却是部署在64位的操作系统上? Yes = 32-Bit No = 64-Bit 5、最重要的一点是,其他情况下那就在32位的OS上用32位的JDK