32位JDK和64位JDK

  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 bitJVM 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 32bitJVM 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優先。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/390143.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/390143.shtml
英文地址,請注明出處:http://en.pswp.cn/news/390143.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

中小企業如何選擇OA協同辦公產品?最全的對比都在這里了

對于中小企業來說,傳統的OA 產品,如泛微、藍凌、致遠、華天動力等存在價格高、使用成本高、二次開發難等特點,并不適合企業的協同管理。 國內OA市場也出現了一批輕便、低價的OA產品,本文針對以下幾款適合中小企業的OA產品在功能、…

python緩沖區_如何在Python中使用Google的協議緩沖區

python緩沖區When people who speak different languages get together and talk, they try to use a language that everyone in the group understands. 當說不同語言的人聚在一起聊天時,他們會嘗試使用小組中每個人都能理解的語言。 To achieve this, everyone …

PowerDesigner16中的對象無效,不允許有擴展屬性 問題的解決

PowerDesigner16中的對象無效,不允許有擴展屬性 消息 15135,級別 16,狀態 1,過程 sp_addextendedproperty,第 37 行 對象無效。XXXXXXX 不允許有擴展屬性,或對象不存在。 把 execute sp_addextendedpropert…

Elasticsearch學習(2)—— 常見術語

為什么80%的碼農都做不了架構師?>>> cluster (集群):一個或多個擁有同一個集群名稱的節點組成了一個集群。每個集群都會自動選出一個主節點,如果該主節點故障,則集群會自動選出新的主節點來替換故障節點。 node (節點…

67. 二進制求和

67. 二進制求和 給你兩個二進制字符串,返回它們的和(用二進制表示)。 輸入為 非空 字符串且只包含數字 1 和 0。 示例 1: 輸入: a “11”, b “1” 輸出: “100” 示例 2: 輸入: a “1010”, b “1011” 輸出: “10101” 提示&…

前端開發有哪些技術棧要掌握_為什么要掌握前端開發的這四個主要概念

前端開發有哪些技術棧要掌握After working as a front-end developer for three years, I have been able to summarize what I feel are the four major concepts of front-end development. Knowing and studying these four areas will make you stand out from the crowd.在…

python中的序列化與反序列化

之前,在學習python時,一直弄不明白pickle和json模塊的序列化和反序例化之間的區別和用法,最近閑來有時間,重新研究了這兩個模塊,也算是基本搞明白他們之中的區別了。 用于序列化的兩個模塊, json&#xff0…

1114. 按序打印

1114. 按序打印 我們提供了一個類: public class Foo { public void first() { print(“first”); } public void second() { print(“second”); } public void third() { print(“third”); } } 三個不同的線程 A、B、C 將會共用一個 Foo 實例。 一個將會調用 …

2018年應用交付控制器市場將發生重大變化

應用交付控制器(ADC)一直以來都是基礎設施的關鍵部分。它們位于應用程序和基礎架構之間,是唯一可以同時使用應用程序和網絡語言的技術。IT行業正在經歷一個快速的現代化進程,包含諸如軟件定義的網絡、云、容器等其他計劃對基礎設施…

如何測試一個水杯

關于一個水杯如何測試?這個被認為是測試界最為經驗的面試題了,下面是我的回答思路: 對于一個軟件的測試,重點是測試的思路以及測試的全面性的體現。 軟件測試應該先重點再次重點,對于軟件而言重點自然在于功能測試&…

1115. 交替打印FooBar

1115. 交替打印FooBar 我們提供一個類&#xff1a; class FooBar {public void foo() {for (int i 0; i < n; i) {print("foo");}}public void bar() {for (int i 0; i < n; i) {print("bar");}} }兩個不同的線程將會共用一個 FooBar 實例。其中…

IntelliJ IDEA 運行 Maven 項目

1.官方文檔說IntelliJ IDEA已經自身集成了maven&#xff0c;則不用勞心去下載maven 2.導入一個程序&#xff0c;看是否是maven程序的關鍵在于工程之中有沒有pom.xml這個文件&#xff0c;比如這里 3.為這個工程配置好服務器3.1 點擊“Edit Configurations”3.2 進入Run/Debug C…

資深老鳥整理,Java接口自動化測試總結,從0到1自動化...

這幾年接口自動化變得越來越熱門&#xff0c;相對比于UI自動化&#xff0c;接口自動化有一些優勢 1&#xff09;運行比UI更穩定&#xff0c;讓BUG更容易定位 2&#xff09;UI自動化維護成本太高&#xff0c;接口相對低一些 接口測試其實有很多方式&#xff0c;主要有兩種&…

parcel react_如何使用Parcel設置React應用

parcel reactFor a long time Webpack was one of the biggest barriers-to-entry for someone wanting to learn React. Theres a lot of boilerplate configuration that can be confusing, especially if youre new to React. 長期以來&#xff0c; Webpack一直是想要學習Re…

1117. H2O 生成

1117. H2O 生成 現在有兩種線程&#xff0c;氧 oxygen 和氫 hydrogen&#xff0c;你的目標是組織這兩種線程來產生水分子。 存在一個屏障&#xff08;barrier&#xff09;使得每個線程必須等候直到一個完整水分子能夠被產生出來。 氫和氧線程會被分別給予 releaseHydrogen 和…

pdf 字體和圖片抽取

2019獨角獸企業重金招聘Python工程師標準>>> #安裝mutoos sudo apt-get install mupdf-tools #抽取字體 mutool extract LTN20180531052_C.pdf 轉載于:https://my.oschina.net/colin86/blog/1842412

推箱子2-向右推!_保持冷靜,砍箱子-銀行

推箱子2-向右推!Hack The Box (HTB) is an online platform allowing you to test your penetration testing skills. It contains several challenges that are constantly updated. Some of them are simulating real world scenarios and some of them lean more towards a …

611. 有效三角形的個數

611. 有效三角形的個數 給定一個包含非負整數的數組&#xff0c;你的任務是統計其中可以組成三角形三條邊的三元組個數。 示例 1: 輸入: [2,2,3,4] 輸出: 3 解釋: 有效的組合是: 2,3,4 (使用第一個 2) 2,3,4 (使用第二個 2) 2,2,3注意: 數組長度不超過1000。數組里整數的范…

python學習day04

一&#xff1a;今天是一個學習列表后的實踐訓練 購物小程序&#xff1a; #codeing:UTF-8 #__author__:Duke #date:2018/3/1/001product_list [(mac,7000),(bike,1000),(phone,2000),(kindle,800),(iwatch,3000), ]; shopping_car []; saving input("please input your …

mybatis多產數_freeCodeCamp杰出貢獻者–我們如何選擇,認可和獎勵多產的志愿者

mybatis多產數freeCodeCamp.org is only possible thanks to the thousands of contributors around the world who help expand and improve the community. They do this mainly through:感謝全球各地成千上萬的貢獻者&#xff0c;他們致力于擴大和改善社區&#xff0c;因此f…