特黄特色三级在线观看免费,看黄色片子免费,色综合久,欧美在线视频看看,高潮胡言乱语对白刺激国产,伊人网成人,中文字幕亚洲一碰就硬老熟妇

學(xué)習(xí)啦>學(xué)習(xí)電腦>電腦硬件知識(shí)>內(nèi)存知識(shí)>

JVM 內(nèi)存設(shè)置大小

時(shí)間: 捷鋒774 分享

  JVM是Java Virtual Machine(Java虛擬機(jī))的縮寫(xiě),JVM是一種用于計(jì)算設(shè)備的規(guī)范,它是一個(gè)虛構(gòu)出來(lái)的計(jì)算機(jī),是通過(guò)在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能來(lái)實(shí)現(xiàn)的。下面是學(xué)習(xí)啦小編帶來(lái)的關(guān)于JVM 內(nèi)存設(shè)置大小的內(nèi)容,歡迎閱讀!

  JVM 內(nèi)存設(shè)置大小:

  Eclipse崩潰,錯(cuò)誤提示:

  MyEclipse has detected that less than 5% of the 64MB of Perm

  Gen (Non-heap memory) space remains. It is strongly recommended

  that you exit and restart MyEclipse with new virtual machine memory

  paramters to increase this memory. Failure to do so can result in

  data loss. The recommended Eclipse memory parameters are:

  eclipse.exe -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M

  1.參數(shù)的含義

  -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M

  -vmargs 說(shuō)明后面是VM的參數(shù),所以后面的其實(shí)都是JVM的參數(shù)了

  -Xms128m JVM初始分配的堆內(nèi)存

  -Xmx512m JVM最大允許分配的堆內(nèi)存,按需分配

  -XX:PermSize=64M JVM初始分配的非堆內(nèi)存

  -XX:MaxPermSize=128M JVM最大允許分配的非堆內(nèi)存,按需分配

  我們首先了解一下JVM內(nèi)存管理的機(jī)制,然后再解釋每個(gè)參數(shù)代表的含義。

  1)堆(Heap)和非堆(Non-heap)內(nèi)存

  按照官方的說(shuō)法:“Java 虛擬機(jī)具有一個(gè)堆,堆是運(yùn)行時(shí)數(shù)據(jù)區(qū)域,所有類(lèi)實(shí)例和數(shù)組的內(nèi)存均從此處分配。堆是在 Java 虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建的。”“在JVM中堆之外的內(nèi)存稱(chēng)為非堆內(nèi)存(Non-heap memory)”。

  可以看出JVM主要管理兩種類(lèi)型的內(nèi)存:堆和非堆。簡(jiǎn)單來(lái)說(shuō)堆就是Java代碼可及的內(nèi)存,是留給開(kāi)發(fā)人員使用的;非堆就是JVM留給自己用的,

  所以方法區(qū)、JVM內(nèi)部處理或優(yōu)化所需的內(nèi)存(如JIT編譯后的代碼緩存)、每個(gè)類(lèi)結(jié)構(gòu)(如運(yùn)行時(shí)常數(shù)池、字段和方法數(shù)據(jù))以及方法和構(gòu)造方法的代碼都在非堆內(nèi)存中。

  堆內(nèi)存分配

  JVM初始分配的堆內(nèi)存由-Xms指定,默認(rèn)是物理內(nèi)存的1/64;JVM最大分配的堆內(nèi)存由-Xmx指定,默認(rèn)是物理內(nèi)存的1/4。默認(rèn)空余堆內(nèi)存小于40%時(shí),JVM就會(huì)增大堆直到-Xmx的最大限制;

  空余堆內(nèi)存大于70%時(shí),JVM會(huì)減少堆直到-Xms的最小限制。因此服務(wù)器一般設(shè)置-Xms、-Xmx 相等以避免在每次GC 后調(diào)整堆的大小。

  說(shuō)明:如果-Xmx 不指定或者指定偏小,應(yīng)用可能會(huì)導(dǎo)致java.lang.OutOfMemory錯(cuò)誤,此錯(cuò)誤來(lái)自JVM,不是Throwable的,無(wú)法用try...catch捕捉。

  非堆內(nèi)存分配

  JVM使用-XX:PermSize設(shè)置非堆內(nèi)存初始值,默認(rèn)是物理內(nèi)存的1/64;由XX:MaxPermSize設(shè)置最大非堆內(nèi)存的大小,默認(rèn)是物理內(nèi)存的1/4。(還有一說(shuō):MaxPermSize缺省值和-server -client選項(xiàng)相關(guān),

  -server選項(xiàng)下默認(rèn)MaxPermSize為64m,-client選項(xiàng)下默認(rèn)MaxPermSize為32m。這個(gè)我沒(méi)有實(shí)驗(yàn)。)

  上面錯(cuò)誤信息中的PermGen space的全稱(chēng)是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域。還沒(méi)有弄明白PermGen space是屬于非堆內(nèi)存,還是就是非堆內(nèi)存,但至少是屬于了。

  XX:MaxPermSize設(shè)置過(guò)小會(huì)導(dǎo)致java.lang.OutOfMemoryError: PermGen space 就是內(nèi)存益出。

  說(shuō)說(shuō)為什么會(huì)內(nèi)存益出:

  (1)這一部分內(nèi)存用于存放Class和Meta的信息,Class在被 Load的時(shí)候被放入PermGen space區(qū)域,它和存放Instance的Heap區(qū)域不同。

  (2)GC(Garbage Collection)不會(huì)在主程序運(yùn)行期對(duì)PermGen space進(jìn)行清理,所以如果你的APP會(huì)LOAD很多CLASS 的話,就很可能出現(xiàn)PermGen space錯(cuò)誤。

  這種錯(cuò)誤常見(jiàn)在web服務(wù)器對(duì)JSP進(jìn)行pre compile的時(shí)候。

  2)JVM內(nèi)存限制(最大值)

  首先JVM內(nèi)存限制于實(shí)際的最大物理內(nèi)存,假設(shè)物理內(nèi)存無(wú)限大的話,JVM內(nèi)存的最大值跟操作系統(tǒng)有很大的關(guān)系。簡(jiǎn)單的說(shuō)就32位處理器雖然可控內(nèi)存空間有4GB,但是具體的操作系統(tǒng)會(huì)給一個(gè)限制,

  這個(gè)限制一般是2GB-3GB(一般來(lái)說(shuō)Windows系統(tǒng)下為1.5G-2G,Linux系統(tǒng)下為2G-3G),而64bit以上的處理器就不會(huì)有限制了。

  2. 為什么有的機(jī)器我將-Xmx和-XX:MaxPermSize都設(shè)置為512M之后Eclipse可以啟動(dòng),而有些機(jī)器無(wú)法啟動(dòng)?

  通過(guò)上面對(duì)JVM內(nèi)存管理的介紹我們已經(jīng)了解到JVM內(nèi)存包含兩種:堆內(nèi)存和非堆內(nèi)存,另外JVM最大內(nèi)存首先取決于實(shí)際的物理內(nèi)存和操作系統(tǒng)。所以說(shuō)設(shè)置VM參數(shù)導(dǎo)致程序無(wú)法啟動(dòng)主要有以下幾種原因:

  1) 參數(shù)中-Xms的值大于-Xmx,或者-XX:PermSize的值大于-XX:MaxPermSize;

  2) -Xmx的值和-XX:MaxPermSize的總和超過(guò)了JVM內(nèi)存的最大限制,比如當(dāng)前操作系統(tǒng)最大內(nèi)存限制,或者實(shí)際的物理內(nèi)存等等。說(shuō)到實(shí)際物理內(nèi)存這里需要說(shuō)明一點(diǎn)的是,

  如果你的內(nèi)存是1024MB,但實(shí)際系統(tǒng)中用到的并不可能是1024MB,因?yàn)橛幸徊糠直挥布加昧恕?/p>

  3. 為何將上面的參數(shù)寫(xiě)入到eclipse.ini文件Eclipse沒(méi)有執(zhí)行對(duì)應(yīng)的設(shè)置?

  那為什么同樣的參數(shù)在快捷方式或者命令行中有效而在eclipse.ini文件中是無(wú)效的呢?這是因?yàn)槲覀儧](méi)有遵守eclipse.ini文件的設(shè)置規(guī)則:

  參數(shù)形如“項(xiàng) 值”這種形式,中間有空格的需要換行書(shū)寫(xiě),如果值中有空格的需要用雙引號(hào)包括起來(lái)。比如我們使用-vm C:/Java/jre1.6.0/bin/javaw.exe參數(shù)設(shè)置虛擬機(jī),

  在eclipse.ini文件中要寫(xiě)成這樣:

  -vm

  C:/Java/jre1.6.0/bin/javaw.exe

  -vmargs

  -Xms128M

  -Xmx512M

  -XX:PermSize=64M

  -XX:MaxPermSize=128M

  實(shí)際運(yùn)行的結(jié)果可以通過(guò)Eclipse中“Help”-“About Eclipse SDK”窗口里面的“Configuration Details”按鈕進(jìn)行查看。

  另外需要說(shuō)明的是,Eclipse壓縮包中自帶的eclipse.ini文件內(nèi)容是這樣的:

  -showsplash

  org.eclipse.platform

  --launcher.XXMaxPermSize

  256m

  -vmargs

  -Xms40m

  -Xmx256m

  其中–launcher.XXMaxPermSize(注意最前面是兩個(gè)連接線)跟-XX:MaxPermSize參數(shù)的含義基本是一樣的,我覺(jué)得唯一的區(qū)別就是前者是eclipse.exe啟動(dòng)的時(shí)候設(shè)置的參數(shù),

  而后者是eclipse所使用的JVM中的參數(shù)。其實(shí)二者設(shè)置一個(gè)就可以了,所以這里可以把–launcher.XXMaxPermSize和下一行使用#注釋掉。

  4. 其他的啟動(dòng)參數(shù)。 如果你有一個(gè)雙核的CPU,也許可以嘗試這個(gè)參數(shù):

  -XX:+UseParallelGC

  讓GC可以更快的執(zhí)行。(只是JDK 5里對(duì)GC新增加的參數(shù))

  補(bǔ)充:

  如果你的WEB APP下都用了大量的第三方j(luò)ar,其大小超過(guò)了服務(wù)器jvm默認(rèn)的大小,那么就會(huì)產(chǎn)生內(nèi)存益出問(wèn)題了。

  解決方法: 設(shè)置MaxPermSize大小

  可以在myelipse里選中相應(yīng)的服務(wù)器比如tomcat5,展開(kāi)里面的JDK子項(xiàng)頁(yè)面,來(lái)增加服務(wù)器啟動(dòng)的JVM參數(shù)設(shè)置:

  -Xms128m

  -Xmx256m

  -XX:PermSize=128M

  -XX:MaxNewSize=256m

  -XX:MaxPermSize=256m

  或者手動(dòng)設(shè)置MaxPermSize大小,比如tomcat,

  修改TOMCAT_HOME/bin/catalina.bat,在echo "Using CATALINA_BASE: $CATALINA_BASE"上面加入以下行:

  JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m

  建議:將相同的第三方j(luò)ar文件移置到tomcat/shared/lib目錄下,這樣可以減少jar 文檔重復(fù)占用內(nèi)存

看了JVM 內(nèi)存設(shè)置大小文章內(nèi)容的人還看:

1.堆和棧的區(qū)別

2.基于多平臺(tái)的移動(dòng)終端網(wǎng)絡(luò)應(yīng)用探析

672061