免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Jackychen83

JVM內(nèi)存最大能調(diào)多大分析【經(jīng)典】
上次用weblogic 把 -XmxXXXX 設(shè)成2G,就啟動(dòng)不起來,設(shè)小點(diǎn)就起來了,當(dāng)時(shí)很氣,怎么2G都起不了,今天在看到了一篇解釋,轉(zhuǎn)過來了
這 次一位老友提出了這個(gè)問題,記得當(dāng)年一個(gè)java高手在blogjava提出后,被罵得半死。大家使用java -XmxXXXX -version版本得出了不同的結(jié)論。后來老友說大概是1800M左右,我當(dāng)時(shí)反駁,“我設(shè)置過服務(wù)器8G內(nèi)存,我使用兩個(gè)tomcat,每個(gè)2G”。 為此,我翻開所有的JVM的內(nèi)存管理的c代碼,沒有任何結(jié)論。我不是linux內(nèi)核程序員,但是我看過linux的源碼,知道32位體系結(jié)構(gòu)的計(jì)算機(jī)尋址 空間是2^32=4G,intel Pentium Pro處理器尋址空間是36位,CPU內(nèi)部增加了PAE寄存器。用于處理多出來的4根地址
線 的使用,所以PAE的技術(shù)實(shí)現(xiàn)最大2^36=64G尋址。通過linux的內(nèi)核源碼,標(biāo)準(zhǔn)Linux內(nèi)核對(duì)于物理內(nèi)存的管理采用1:3的分配比例,即物理 內(nèi)存的1/4為內(nèi)核空間(kernel space),剩下的3/4為用戶進(jìn)程空間(user space),因此,在一臺(tái)4G內(nèi)存的服務(wù)器上,用戶進(jìn)程可使用的內(nèi)存最大也就是3G。當(dāng)進(jìn)程被內(nèi)核調(diào)入CPU運(yùn)行時(shí),不同的地址空間數(shù)據(jù)會(huì)被調(diào)入4G以 內(nèi)的用戶進(jìn)程空間,其實(shí)就能用3G。 IA32架構(gòu)上,單一進(jìn)程是不能使用超過4G的內(nèi)存空間的。但是我記得我給mysql server分配內(nèi)存大約是1.7G左右,不是2的32次方-1,我分配java 2G內(nèi)存的計(jì)算機(jī)是IBM的RS6000.
經(jīng)過不同平臺(tái)的測(cè) 試,我得出了大概的數(shù)值,win2k下1.6G左右,nt下1.2G,原因是這樣的,Classic VM and HotSpot VM 存放用戶區(qū)的連續(xù)地址中,NT把 kernel DLLs 放在 0x7c 開頭的地址空間,所以nt下只有<2G的空間,所以JVM heap 使用極限是2G.用戶的dll開始于0x77000000,用戶的應(yīng)用程序開始于0x00400000.我現(xiàn)在唯一確定的是sun可能為了防止和某些 JVM插件的沖突,把dll的地址給rebase一下,這樣使用的空間就很少了一部分.為什末rebase,原因是這樣的,因?yàn)樵趙indows下編譯 dll 的默認(rèn)地址都是10000000, 一般在release之前的時(shí)候要rebase一下,rebase 的 -b 這個(gè)參數(shù)是指定一個(gè)起始地址,MSDN建議地址是0x60000000,這個(gè)工具隨visual studio和platform SDK發(fā)放。
例 如
rebase.exe -b 0x6D000000 \jdk\jre\bin\*.dll \jdk\jre\bin\hotspot\jvm.dll這樣你的JVM用的內(nèi)存多一些,目前關(guān)于這個(gè)我只能得到BEA的 JRockit最大也只能使用1.8G內(nèi)存,看來各家編譯JDK時(shí)都作了些手腳.
目前只能得到bea的的-Xmx最小值是16 MB,sun的資料很不全,還好java開源了,可以不依靠sun了.

sun提供的資料
Maximum Address Space Per Process  

Operating System                   Maximum Address Space Per Process

Redhat Linux 32 bit                                      2 GB

Redhat Linux  64 bit                                     3 GB

Windows 98/2000/NT/Me/XP                                  2 GB

Solaris x86 (32 bit)                                      4 GB

Solaris 32 bit                                            4 GB

Solaris 64 bit                                            Terabytes
以 上文檔有誤,32位的redhat Server利用 Highmem技術(shù)可以使用3G內(nèi)存.
solaris不愧是java的誕生平臺(tái)。

問了一下bea的工程師,得出大致的結(jié)論,
Windows 2003/XP using the /3GB switch (32-bit OS)
1.85 GB - JRockit 5.0 R25.2 (SP2)
2.85 GB - JRockit 5.0 R26 (SP3)

Windows 2003/XP x64 Edition with a 32-bit JVM (64-bit OS)
2.05 GB - JRockit 5.0 R25.2 (SP2)
3.85 GB - JRockit 5.0 R26 (SP3)

對(duì)于windows 2000打開3G模式,windows核心編程說得很清楚,boot.ini加入/3G參數(shù)。

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)\WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINNT="????" /3GB

Note: "????" in the previous example can be the programmatic name of any of the following operating system versions:

Windows XP Professional
Windows Server 2003
Windows Server 2003, Enterprise Edition
Windows Server 2003, Datacenter Edition
Windows 2000 Advanced Server
Windows 2000 Datacenter Server
Windows NT Server 4.0, Enterprise Edition

在我的機(jī)子測(cè)試一把,我的自己配置,1G內(nèi)存,winXP

沒有打開3G模式,sun的jdk 1.6 java -Xmx1447M -version,揪出錯(cuò)了,jrockit-R27.1.0-jdk1.5.0_08為1911M,3G模式 sun的jdk沒有變化,IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 Windows XP x86-32 j9vmwi3223-2006050
4 (JIT enabled) 3G和2G相同,java -Xmx1787M -version 就出問題,jrockit-R27.1.0-jdk1.5.0_08為2899M,注意Xmx的內(nèi)存不是物 理內(nèi)存,我的機(jī)子物理內(nèi)存只有1G
jrockit不愧為java第一虛擬機(jī),只可惜不開源。




今天分析了當(dāng)前比較流行的幾個(gè)不同公司不同版本JVM的最大內(nèi)存,得出來的結(jié)果如下:

公司 JVM版本 最大內(nèi)存(兆)client 最大內(nèi)存(兆)server
SUN 1.5.x 1492 1520
SUN 1.5.5(Linux) 2634 2660
SUN 1.4.2 1564 1564
SUN 1.4.2(Linux) 1900 1260
IBM 1.4.2(Linux) 2047 N/A
BEA JRockit 1.5 (U3) 1909 1902



除非特別說明,否則JVM版本都運(yùn)行在Windows操作系統(tǒng)下

附:如何獲得JVM的最大可用內(nèi)存

在命令行下用 java -Xmx1200m -XX:MaxPermSize=60m -version 命令來進(jìn)行測(cè)試,然后逐漸的增大XXXX的值,如果執(zhí)行正常就表示指定的內(nèi)存大小可用,否則會(huì)打印錯(cuò)誤信息。
最后得到的虛擬機(jī)實(shí)際分配到的
總內(nèi)存大小=堆內(nèi)存+非堆內(nèi)存
1200m:為堆內(nèi)存大小,如果不指定后者參數(shù)則有最大數(shù)限制,網(wǎng)上很多文章認(rèn)為這就是JVM內(nèi)存,-Xmx為設(shè)置最大堆內(nèi)存
60m:
為非堆內(nèi)存大小,-XX:MaxPermSize實(shí)為永久域內(nèi)存,在堆內(nèi)存之外,屬于非堆內(nèi)存部分,jdk1.5我測(cè)了好像默認(rèn)為62m,即得到非堆部分默認(rèn)內(nèi)存)

Sun HotSpot 1.4.1使用分代收集器,它把堆分為三個(gè)主要的域:新域、舊域以及永久域。Sun JVM生成的所有新對(duì)象放在新域中。一旦對(duì)象經(jīng)歷了一定數(shù)量的垃圾收集循環(huán)后,便獲得使用期并進(jìn)入舊域。在永久域中Sun JVM則存儲(chǔ)class和method對(duì)象。就配置而言,永久域是一個(gè)獨(dú)立域并且不認(rèn)為是堆的一部分。

實(shí)際發(fā)現(xiàn)版本上有細(xì)微差別的JDK最大容許內(nèi)存值都不盡相同,因此在實(shí)際的應(yīng)用中還是要自己試驗(yàn)一下看到底內(nèi)存能達(dá)到什么樣的值。

通過這個(gè)表想說明的是,如果你的機(jī)器的內(nèi)存太多的話,只能通過多運(yùn)行幾個(gè)實(shí)例來提供機(jī)器的利用率了,例如跑Tomcat,你可以多裝幾 個(gè)Tomcat并 做集群,依此類推。

≡≡≡ 網(wǎng)友評(píng)論 ≡≡≡
東子 網(wǎng)友說:
Windows下的最大內(nèi)存應(yīng)該跟NT內(nèi)核對(duì)地址空間的保留也有關(guān)系, 好像默認(rèn)情況下NT內(nèi)核要占用高2G的地址空間, 所以應(yīng)用程序撐死能獲得的內(nèi)存不會(huì)超過2G; 記得有一個(gè)參數(shù)可以讓NT只占1G內(nèi)存, 這樣應(yīng)用程序就有3G地址空間可用, 相應(yīng)環(huán)境下JVM能允許的最大內(nèi)存可能也會(huì)升高.

at 05-10-06 00:04
purpureleaf 網(wǎng)友說:
windows的每個(gè)應(yīng)用(不是尋址)的尋址空間一般是2g或者3g,取決于一個(gè)參數(shù)。但是只要使用一組特定的函數(shù)分配內(nèi)存,每個(gè)應(yīng)用的尋址空間可以遠(yuǎn)遠(yuǎn) 超過4g

jdk可能是設(shè)置不了那個(gè)大的內(nèi)存,但那不是windows造成的,是jdk造成的,在linux上一樣設(shè)置不了??磥碜鰆ava的朋友對(duì)windows 還是不熟

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Eclipse無法啟動(dòng):JVM terminated.Exit Code=-Eclipse無法啟動(dòng):JVM terminated.Exit Code=-1 Eclipse無法啟動(dòng):JVM t
Linux下tomcat啟動(dòng)jvm內(nèi)存設(shè)置
ZGC,一個(gè)超乎想象的垃圾收集器
通向架構(gòu)師的道路(第四天)之Tomcat性能調(diào)優(yōu)
Oracle宣布JVM的未來策略
Java的垃圾回收機(jī)制詳解和調(diào)優(yōu) --燎原
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服