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