我應該使用32位還是64位JVM?

這是我在企業軟件開發生涯中多次遇到的問題。 我不得不每隔一段時間就提供有關配置特定新環境的建議。
而且,很多時候,手頭的問題與“我應該使用32位或64位JVM”有關。 老實說,一開始我只是擲硬幣。 而不是給出合理的答案。 (對不起,兄弟!)但是到目前為止,我已經對此進行了更多的了解,并希望與您分享。 第一站–越多越好。 對? 所以–當64> 32時,這很容易 32 or 64 bit 答:如果可能,請始終選擇64位? 好吧,抱著你的馬。 64位體系結構的缺點是相同的數據結構會消耗更多的內存。 多很多。 我們的測量表明,根據JVM版本和操作系統版本以及硬件體系結構,最終使用的堆比32位多使用30-50%。 較大的堆還可能導致較長的GC暫停,從而影響應用程序延遲-在4.5GB的堆上運行完整的GC肯定比在3GB的堆上花費更長的時間。 因此,僅僅因為64比32大就跳到64位潮流上是不正確的。

但是……您什么時候才想要使用64位JVM? 在大多數情況下,原因是堆大。 在不同的體系結構上,您很快就會遇到32位體系結構上最大堆大小的限制。 下面說明了不同平臺上的這些限制:

操作系統 最大堆 筆記
的Linux 2GB 在特定的內核上有3GB的空間,例如hugemem
視窗 1.5GB 帶有“ / 3GB”啟動標志和通過/ LARGEADDRESSAWARE開關編譯的JRE的最大3GB)
Mac OS X 3.8GB 警報-找不到古老的Mac,因此未經我測試

現在怎么這么糟? 畢竟,我敢打賭,您已經看到32位計算機在16G + RAM上運行并且運行良好。 JVM在Windows上分配的內存不足此16G的10%怎么了?

主要原因–地址空間。 理論上,在32位系統中,每個進程最多可以分配4GB的內存。 在Windows上打破這一點的是如何處理進程地址空間。 Windows將進程地址空間減少一半。 其中一半保留給內核(用戶進程無法使用),另一半保留給用戶。 盒子中有多少RAM無關緊要,一個32位進程只能使用2GB RAM。 更糟糕的是,該地址空間必須是連續的,因此在實踐中,Windows機頂盒通常只剩下1.5-1.8GB的堆空間。

您可以使用32位窗口來減少內核空間并增加用戶空間,這是一個技巧。 您可以在boot.ini中使用/ 3GB參數。 但是,要實際利用此機會,必須使用/ LARGEADDRESSAWARE開關來編譯/鏈接JVM。

不幸的是,至少對于Hotspot JVM并非如此。 直到最新的JDK 1.7版本,才使用此選項編譯JVM。 如果您在2006年后版本的jRockit上運行,則更加幸運。 在這種情況下,您可以享受高達2.8-2.9GB的堆大小。

那么–我們可以得出結論,如果您的應用程序需要超過2-3GB的內存,那么您應該始終在64位上運行嗎? 也許。 但是您也必須意識到這些威脅。 我們已經介紹了罪魁禍首–增加了堆消耗,并延長了GC暫停時間。 讓我們在這里分析原因。

問題1:在64位上需要30-50%的更多堆

為什么這樣? 主要是由于64位體系結構中的內存布局。 首先–在64位JVM上,對象標頭是12個字節。 其次,對象引用可以是4個字節,也可以是8個字節,具體取決于JVM標志和堆的大小。 與32位標頭上的8個字節和引用標本上的4個字節相比,這無疑增加了一些開銷。 您還可以深入研究我們的較早文章之一,以獲取有關計算對象的內存消耗的更多信息。

問題2:較長的垃圾收集暫停時間

建立更多的堆意味著GC在清除未使用的對象時還有更多工作要做。 在現實生活中,這意味著在構建大于12-16GB的堆時,您必須格外小心。 無需進行微調和測量,您就可以輕松引入幾分鐘的完整GC暫停時間。 在延遲不是很關鍵并且您可以優化吞吐量的應用程序中,這可能沒問題,但是在大多數情況下,這可能會成為熱門。

那么,當我需要更大的堆并且不希望引入由64位體系結構引起的開銷時,該怎么辦? 在我們較早的博客文章中 ,我們介紹了幾種技巧–您可以通過堆分區,GC調整,在不同的JVM上構建或在堆外分配內存來擺脫困境。

最后,讓我們重申一下,您應該始終了解選擇64位JVM的后果。 但不要害怕此選項。

參考: 應該使用32位還是64位JVM? 從我們的JCG合作伙伴 Vladimir Sor在Plumbr Blog博客上獲得。

翻譯自: https://www.javacodegeeks.com/2012/12/should-i-use-a-32-or-a-64-bit-jvm.html

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

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

相關文章

python安裝pyecharts清華_基于Python安裝pyecharts所遇的問題及解決方法

最近學習到數據可視化內容,老師推薦安裝pyecharts,于是pip install 了一下,結果...掉坑了,下面是我的跳坑經驗,如果你有類似問題,希望對你有所幫助。第一個坑:這個不難理解,缺少pyecharts-jupyt…

C語言內存分配

C語言內存分配 C語言的內存分配主要有5個區域: 1、棧區:在運行函數時,函數內的局部變量(不包含static變量)、函數返回值的存儲單元在棧區上創建。函數運行結束時這些存儲單元自己主動被釋放。棧區內存分配運算內置于處…

在Ajax方式產生的浮動框中,點擊選項包含某個關鍵字的選項

#!usr/bin/env python #-*- coding:utf-8 -*- """ author: sleeping_cat Contact : zwy24zwy163.com """ #在Ajax方式產生的浮動框中,點擊選項包含某個關鍵字的選項 #通過模擬鍵盤下箭頭進行選擇懸浮框選項from selenium imp…

android studio點擊圖片,如何在Android Studio中的模擬器圖庫中添加圖像?

如何在Android Studio中的模擬器圖庫中添加圖像?我正在開發圖像過濾器應用程序。 但是,如果我沒有任何圖像,就無法真正嘗試。我知道我可以在電話中對其進行測試,但這并不相同,因為我需要錯誤消息和其他內容。我只想從A…

移動端學習目錄

前面的話 iphone4發布是幾年前的事情,而如今早已是移動互聯網的時代。人們不再正襟危坐在電腦前,而更愿意把時間耗費在手機上,隨時隨地地享受互聯網。在移動端可以使用最新最炫的前端技術,而不用再考慮老版本IE的兼容性。當前&…

實踐中的構建者模式

我將不深入討論該模式,因為已經有大量的帖子和書籍對此進行了詳細的解釋。 相反,我將告訴您為什么以及何時應該考慮使用它。 但是,值得一提的是,這種模式與《 四人幫》一書中介紹的模式有些不同。 雖然原始模式著重于抽象化構造步…

python計算汽車的平均油耗_用python對汽車油耗進行數據分析

原標題:用python對汽車油耗進行數據分析- 從http://fueleconomy.gov/geg/epadata/vehicles.csv.zip下載汽車油耗數據集并解壓- 進入jupyter notebook(ipython notebook)并新建一個New Notebook- 輸入命令[python]view plaincopyimportpandas as pdimportnumpy as np…

git常用命令2

##一、git常用命令 ###1、 push文件 * 打開cmd窗口 * 輸入f:,進入f:(自己隨便在自己的電腦上找個位置就行了,這里的f:,表示的是f盤) * 然后輸入mkdir workSpace,會自動在f盤下生成一個workSpace文件夾 * 然…

android移動應用基礎教程源代碼,Android移動應用基礎教程 【程序活動單元Activity】...

本章目錄一、Activity的生命周期1、生命周期狀態2 、生命周期方法3、橫豎屏切換時的生命周期二、Activity的創建配置和關閉1、Activity的創建2、配置Activity3、開啟和關閉Activity三、Intent與IntentFilter1、Intent介紹1.1 意圖的概念1.2 顯式意圖1.3 隱式意圖2、IntentFilte…

elasticsearch中cluster和transport知識

elasticsearch cluster 概述 elasticsearch節點間通信的基礎transport轉載于:https://www.cnblogs.com/wzj4858/p/8126033.html

Python中使用subplot在一張畫布上顯示多張圖

subplot(arg1, arg2, arg3) arg1: 在垂直方向同時畫幾張圖arg2: 在水平方向同時畫幾張圖arg3: 當前命令修改的是第幾張圖 t np.arange(0,5,0.1) y1 np.sin(2*np.pi*t) y2 np.sin(2*np.pi*t) plt.subplot(211) plt.plot(t,y1,b-.) plt.subplot(212) plt.plot(t,y2,r--) plt.s…

Java 8:從PermGen到元空間

您可能已經知道,現在可以下載JDK 8 Early Access 。 這使Java開發人員可以嘗試Java 8的一些新語言和運行時功能。這些功能之一是完全刪除自Oracle自JDK 7發行以來就宣布的Permanent Generation(PermGen)空間。例如,自JDK 7起&…

oracle symonym_ORACLE SYNONYM詳解

以下內容整理自Oracle 官方文檔一 概念A synonym is an alias for any table, view,materialized view, sequence, procedure, function, package, type, Java classschema object, user-defined object type, or another synonym. Because a synonymis simply an alias, it re…

瀏覽器緩存問題原理以及解決方案

瀏覽器緩存問題: 簡單來說,瀏覽器緩存就是把一個已經請求過的Web資源(如html頁面,圖片,js,數據等)拷貝一份副本儲存在瀏覽器中。緩存會根據進來的請求保存輸出內容的副本。當下一個請求來到的時…

Scikit-Learn機器學習入門

現在最常用的數據分析的編程語言為R和Python。每種語言都有自己的特點,Python因為Scikit-Learn庫贏得了優勢。Scikit-Learn有完整的文檔,并實現很多機器學習算法,而每種算法使用的接口幾乎相同,可以非常快的測試其它學習算法。 Pa…

hdu1542 Atlantis(掃描線+線段樹+離散)矩形相交面積

題目鏈接&#xff1a;點擊打開鏈接 題目描寫敘述&#xff1a;給定一些矩形&#xff0c;求這些矩形的總面積。假設有重疊。僅僅算一次 解題思路&#xff1a;掃描線線段樹離散&#xff08;代碼從上往下掃描&#xff09; 代碼&#xff1a; #include<cstdio> #include <al…

瀏覽器滾動條 --- 自定義“衣裳”

由于種種原因&#xff0c;瀏覽器的默認滾動條“衣裳”實在是 (ˉ▽&#xffe3;&#xff5e;)~~&#xff0c;為了“美”&#xff0c;本人結合萬維網各大神給的經驗和自己的實踐&#xff0c;做了此篇總結。若有錯誤&#xff0c;請在評論里給出&#xff0c;我會及時更改。 我在電…

電腦調分辨率黑屏了怎么辦_調顯示器分辨率黑屏怎么辦

調顯示器分辨率黑屏怎么辦調顯示器分辨率黑屏解決方法&#xff1a;1&#xff0c;開機&#xff0c;當快要進入系統選項時&#xff0c;立即按f8鍵進入“高級模式”&#xff0c;因為系統選項界面顯示的時間非常短&#xff0c;可以提早按f8鍵&#xff0c;否則錯過時機就得重來。2&a…

什么是JNDI,SPI,CCI,LDAP和JCA?

JNDI代表Java命名和目錄接口 。 它是用于提供對目錄服務&#xff08;即帶有對象的服務映射名稱&#xff08;字符串&#xff09;&#xff0c;對遠程對象或簡單數據的引用&#xff09;的訪問的API。 這就是所謂的 約束力 。 綁定集稱為上下文 。 應用程序使用JNDI接口訪問資源。…

android studio gradle 學習,學習Android Studio里的Gradle

一直聽說Gradle很強大&#xff0c;只是偶爾用Android Studio創建Demo的時候看到他一次&#xff0c;今天抽個時間完整記錄一下。1.gradle位置Android Studio項目創建好之后&#xff0c;默認有3個gradle文件&#xff0c;分別位于&#xff1a;/settings.gradle/build.gradle/app/b…