32位和64位系統在計算機領域中常常提及,但是仍然很多人不知道32位和64位的區別,所以本人在網上整理了一些資料,并希望可以與大家一起分享。對于32位和64位之分,本文將分別從處理器,操作系統,JVM進行講解。
IA介紹
? 簡介
說到處理器,大家用的最多的莫過于Intel的處理器了,所以本文主要從Intel的處理器講解32位和64位的處理器之分。?
通常將采用Intel(英特爾)處理器的服務器稱之為IA(IntelArchitecture)架構服務器,又稱 CISC(ComplexInstructionSetComputer復雜指令集)架構服務器,由于IA架構的服務器是基于PC的x86處理器體系結 構,所以又把IA架構的服務器稱為PC服務器或者x86服務器。?
雖然IA構架服務器始于PC,但經過不斷的發展,IA架構服務器已經遠遠超出了PC的概念。?
IA架構根據intel的官方聲明,分為以下三類:?
1 IA-32?
2 Intel? 64?
3 IA-64
? 歷史
x86架構于1978年推出的Intel 8086中央處理器中首度出現,它是從Intel 8008處理器中發展而來的,而8008則是發展自Intel 4004的。8086在三年后為IBM PC所選用,之后x86便成為了個人電腦的標準平臺,成為了歷來最成功的CPU架構。
其他公司也有制造x86架構的處理器,計有Cyrix(現為VIA所收購)、NEC集團、IBM、IDT以及Transmeta。Intel以外最成功的制造商為AMD。?
8086是16位處理器;直到1985年32位的80386的開發,這個架構都維持是16位。?
Intel 80386 32位處理器推出后,也許是到目前為止x86架構的最大躍進。Linux、386BSD、Windows NT和Windows 95都是一開始為386所發展,這種386的基本架構變成未來所有x86系列發展的基礎。
現時Intel把x86-32稱為IA-32,全名為"Intel Architecture, 32-bit"。
隨后IA服務器經歷了486系統、PentiumPro系統、PII系統、PIII系統、XEON系統等幾個階段。處理器系統的處理能力在大幅度提高,而服務器系統的總線結構始終是IA-32總線體系。?
IA-32服務器在發展到8路XEON服務器以后,體系結構已經開始成為制約服務器性能提高的瓶頸。?
因此,hp和Intel自1994年開始合作開發IA-64架構的處理器,IA-64結構既不是Intel的32位x86結構的擴充,也不是完全采用hp公司64位PA-RISC結構,而是一種全新的設計樣式。目前正式宣布支持IA-64平臺的有Monterey、Linux64、hp-UX、Solaris、Win2000,Windows xp等操作系統。?
IA-64的代表產品就是Itanium(安騰)處理器,是專門用在高端企業級64-bit計算環境中競爭的,對抗基于IBM Power4/5,HP PA-RISC,Sun UltraSparc-III及DEC Alpha的高端企業級處理器。
但由于它不能很好地解決與以前32位應用程序的兼容,所以應用受到較大的限制,而AMD在IA-32上新增了64位寄存器,并兼容早期的16位和32位軟件,形成AMD64版本。盡管目前Intel采取了各種軟、硬方法來彌補這一不足,但隨著AMD64處理器的全面投入,Intel的IA-64架構的這兩款處理器前景不容樂觀。
為x86系統而設的應用軟件實在太龐大,Intel眼見使用AMD64的Opteron及Athlon 64取得成功,便需要對競爭者的威脅作出迎擊,也開發了兼容早期16位和32的64位處理器,Intel將之命名為"IA-32E",意即IA-32的延伸,在數星期后才改稱為EM64T。雖然該處理器的內核與AMD64幾乎相同,但是在以往Intel的營銷中,Intel總把AMD的產品貶為自家技術的仿制品,Intel為了自身的面子,定不會承認使用了對手AMD的技術,因此Intel把該技術以EM64T這個名字來推出,后來Intel索性將此技術正式命名為Intel 64。
Intel 64指令集被應用于Pentium 4、Pentium D、Pentium Extreme Edition、Celeron D、Xeon、Intel Core 2及Intel Core i7處理器上。
由于AMD64和Intel64基本上一致,很多軟硬件產品都使用一種不傾向任何一方的詞匯來表明它們對兩種架構的同時兼容。出于這個目的,AMD對這種CPU架構的原始稱呼——"x86-64"被不時地使用,還有變體"x86_64"。其他公司如微軟和太陽計算機系統公司在營銷資料中使用"x64"作為對"x86-64"的縮寫。
? EM64T技術詳解
intel官方是給EM64T這樣定義地:EM64T全稱Extended Memory 64 Technology,即64位內存擴展技術,他是Intel IA-32架構(Intel Architectur-32 extension)地一個擴展,且兼容原來地架構。通過增加CPU地運算位寬擴展增加cpu和內存之間地位寬,從而讓系統支持更大容量地內存(32bit處理器最多只能支持內存容量只有4GB,而64bit地最高則達64GB)。在理論上,雖然EM64T架構最高能夠很好的運行在64 bit內存尋址,但由于設計和制造工藝等方面地因素,并非所有EM64T地處理器都能達到理論地上限。
Intel為支持EM64T技術地處理器可分為兩大類:傳統IA-32模式和IA-32e擴展模式,兩大類下具體又可分為多種運行模式
EM64T運行模式 | ? | ? | ? | ? |
傳統IA-32模式 | ? | ? | IA-32e擴展模式 | ? |
保護模式 | 真實地址模式 | 真實8086模式 | 兼容模式 | 64位模式 |
?
傳統IA-32模式下,與IA-32工作模式一樣,我們可以安裝windows xp 32bit,安裝32位硬件硬件驅動,安裝32位應用程序。目前大部分人的處理器是Intel 64,安裝了windows xp 32,上面的程序運行情況良好,包括16bit和32bit程序。?
兼容模式下,操作系統和硬件驅動程序都是64bit,計算機允許在64bit操作系統下不需要預編譯就可以運行大多數傳統32bit應用程序,這和傳統IA-32模式下基本相同,32位應用程序仍然只能訪問4G內存,但此限制只在進程級,而不在系統級。?
由于兼容模式下,要求硬件驅動程序都是64bit,所以導致了64位Windows最大的一個劣勢就是兼容性,而兼容性方面最突出的就是各種硬件設備的驅動程序。,如果你所用的硬件設備的開發商還沒有開發出針對64位Windows XP的驅動程序,那么要么該設備在64位Windows XP下無法使用,要么使用操作系統自帶的通用驅動勉強使用,但是性能和功能都會受到影響 。?
至于其他軟件程序則一般沒有什么大問題。在64位Windows XP中,只有16位應用程序是完全無法使用的,而32位應用程序則可以繼續使用。不過在安裝這些應用程序的時候也要注意,有些應用程序,雖然和硬件扯不上關系,但是為了實現軟件的某些特殊功能,安裝軟件的時候同時還會向系統中裝入驅動程序,這種程序在沒有發布64位版之前是無法在64位Windows下使用的。?
如著名的截圖軟件SnagIt,該軟件使用默認安裝的時候會向系統中安裝一個虛擬的打印機,該打印機可以將文檔輸出為圖形格式。因為安裝了虛擬設備,因而該程序還沒有提供64位的版本,因此在64位Windows XP下使用默認選項安裝的時候就會出錯,除非我們自定義安裝選項,不安裝這個虛擬打印機。?
但是對于服務器來說,服務器不需要什么外設,硬件的兼容性差對服務器的影響較小。
64bit模式下,必須要有64bit地操作系統、驅動程序和應用程序三者合作,這時操作系統無法運行32位程序,兼容性最差,但充分發揮64位架構的優勢。?
操作系統32 bit和操作系統64 bit
64bit計算主要有兩大優點:可以進行更大范圍的整數運算;可以支持更大的內存。?
64位CPU一次可提取64位數據,比32位提高了一倍,理論上性能會提升1倍。但這是建立在64bit操作系統,64bit軟件的基礎上的。?
但是我們不能因為數字上的變化,而簡單的認為64bit處理器的性能是 32bit處理器性能的兩倍。實際上在32bit應用程序下,32bit處理器的性能甚至會更強,即使是64bit處理器,目前情況下也是在32bit應用下性能更強。所以要認清64bit處理器的優勢,但不可迷信64bit。
那什么情況下,我們需要升級到64bit操作系統呢??
這要取決于應用的類型。以下的例子是從64位處理得到的好處:?
? 加密程序:大多數加密算法基于大量的整型數據,適合在64位通用寄存器和運算器處理。?
? 科學計算:整型數據的科學計算將從64位處理中受益,浮點運算不會從中受益,因為即便是32位處理器,浮點寄存器也已經達到了80位到128位。?
? 需求超過4G的應用程序:如數據庫服務器, 圖形處理和視頻壓縮相關應用。
64位虛擬內存空間理論上最高可以支持直接訪問2EB,不過當前的所謂64位處理器并不能真正做到,原因很簡單,目前還沒有機器支持那么大的物理內存。EM64T提供40位尋址能力,最大支持到1TB內存。
JVM 32 bit和JVM 64 bit
JVM是Java開發人員必不可少的工具,而JVM也有32 bit和64 bit之分.?
那實際上32位和64位JDK有什么區別呢??
JVM 32bit 和JVM 64bit的區別如下:?
? 1目前只有server VM支持64bit JVM,client不支持32bit 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%.
?
JVM?性能分析
Sun的官網上寫著,當一個java應用程序從32bit 平臺移植到64bit平臺的64bit JVM上,應用會有性能損失,相信很多人都會不解。?
從數字上看,我們一般會認為64位JDK比32位JDK好,但是上文說過"實際上在32bit應用程序下,32bit處理器的性能甚至會更強,即使是64bit處理器,目前情況下也是在32bit應用下性能更強"。
許多在大同世界里很簡單的道理包括越多大越好,移到計算機領域里就不是那么回事了。當處理多重CPU時,你會覺得那些多核所多出來的處理單元很有用,但如果你的工作僅僅是單線程的,那你要做的卻是讓其他核一邊歇著。
32位與64位的比較則更加細微。x86-64 架構不僅在x86架構的基礎上增大了寄存器,而且還增加了寄存器的數量。從基本上說這會帶來更好的性能(因為更多的寄存器可以讓編譯器創建更好的機器代碼)。然而很不幸,至今把Java從32位移到64位帶來的只是性能的下降。
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管理越困難,導致相應垃圾回收的性能也會有所不同。
64bit JVM的測試性能-----馬力更大并不總代表性能更強
接下來主要涉及兩個現在廣泛應用的64位平臺——AMD64與PowerPC64,并分別使用IBM與Sun Microsystems這兩個Java語言巨頭提供的Java虛擬機(JVM),通過SPECjvm98與SPECjbb2000的測試,來評價32位與64位中JVM的性能。使用了以下項目測試客戶端性能。? 2_201_compress,一個流行的壓縮程序。 2 _202_jess,一個Java版的NASA CLIPS基于規則的專家系統。 2 _209_db,數據管理基準測試軟件。 2_213_javac,JDK Java編譯器。 2 _222_mpegaudio,一個MPEG-3音頻解碼器。 2 _227_mtrt,一個對圖像文件進行處理的雙線程程序。 2 _228_jack,一個分析程序生成器。
該測試的測試結果總結:?
1 基于運行Linux操作系統的PowerPC64平臺的測試結果,表明如果在此平臺上使用IBM的JVM,那么,那些不需要64位特性的程序,還是讓它們運行在32位JVM中,因為在此平臺的所有測試結果中,64位JVM的性能都比32位平臺低。
2 基于運行Linux操作系統的AMD64平臺的測試結果,表明不管是Sun還是IBM的JVM,32位與64位的性能都在伯仲之間,要注意的是,性能的差異是依賴于具體的應用程序與JVM的,如果需要最佳性能,就必須在某個特定的執行環境中測試某個特定的程序,以評價轉換到64位所帶來的潛在性能提升。
這里以我們熟知的AMD64為例列出部分測試報告。?
圖 1
圖1是在AMD64平臺上,Linux版本的Sun Java 2 Standard Edition Development Kit 5.0 (J2SE 1.5.0)的性能測試報告,結果表明只有三項測試客戶端——_201_compress、_222_mpegaudio、 _228_jack,在64位版本的JVM上比32位表現出更佳的性能。?
圖2
圖2是在 AMD64平臺上,Linux版本的IBM Developer Kit for Linux、Java 2 Technology Edition Version 1.4.2 GA的性能測試報告,測試結果表明只有三項測試客戶端——_209_db、_213_javac、_228_jack,在64位環境下表現出了更佳的性能。
如何選擇JVM 32bit和JVM 64bit
網上有選擇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
總結
本文介紹了32 bit系統和64bit 系統,并介紹我們常用的JVM 32bit和JVM 64bit,并進行比較分析,64bit系統雖然能訪問更多的內存,操作更大的文件和磁盤管理,但是很多情況下性能其實未必比32bit系統好,尤其是JVM。?
所以本人認為:在項目實施中,數據庫服務器可以選擇部署在64bit操作系統上,而對于應用服務器,就不能一概而論了,如果要獲得應用的最佳性能,就要在應用的部署環境中進行測試,以評價轉換到64位所帶來的潛在性能提升,再決定是部署在JVM 32bit還是JVM 64bit。但一般情況下,除非應用需要較大的內存,并超過了2G,并且對應的服務器物理內存超過了4G,否則應該以JVM 32bit優先。