JVM--參數設置

http://blog.sina.com.cn/s/blog_4080505a0100vkru.html html


1.在eclipse設置JVM參數
      打開eclipse窗口首選項Java已安裝的JRE(對在當前開發環境中運行的java程序皆生效,也就是在eclipse中運行的java程序)編輯當前使用的JRE,在缺省VM參數中輸入-Xmx128m -Xms64m -Xmn32m -Xss16m 
java

     或者在運行一個java程序的時候執行:java -Xmx128m -Xms64m -Xmn32m -Xss16m  Test web

Test是一個class文件tomcat

 

 

2.在Tomcat服務器上設置JVM參數服務器

      set CATALINA_OPTS=-Xmx512m -Xms512m -Xmn64m -Xss2m  或者app

      set JAVA_OPTS=-Xmx512m -Xms512m -Xmn64m -Xss2meclipse

      設置CATALINA_OPTS 和  JAVA_OPTS都是一個道理,在啓動tomcat的時候設置參數。性能

      二者區別是JAVA_OPTS在tomcat中止的時候也會執行這個命令。spa

 


3.  查看堆的大小操作系統

     在程序中查看,返回值單位是字節,固然還有其餘JVM參數能夠查看。

     Runtime.getRuntime().maxMemory(); 


     或者在命令行 執行 jvisualvm 命令

     或者%java_home%\bin 目錄下點擊jvisualvm.exe

 

     或者在命令行執行jconsole 命令

     或者%java_home%\bin 目錄下點擊jconsole.exe

 

 

 

 

 

 

 

 

4. java內存能夠分爲堆內存和非堆內存

      堆和非堆:堆是給開發人員用的,是在JVM啓動時建立;非堆是留給JVM本身用的,用來存放類型(類和接口)的信息。它和堆不一樣,運行期內GC不會釋放空間。若是web app用了大量的第三方jar或者應用有太多的class文件而剛好MaxPermSize設置較小,超出了也會致使這塊內存的佔用過多形成溢出,或者 tomcat熱部署時侯不會清理前面加載的環境,只會將context更改成新部署的,非堆存的內容就會愈來愈多,熱部署上幾回就java.lang.OutOfMemoryError: PermGen space .

       ---- 堆內存設置:程序能夠到達的,能夠操做的
       -Xms 初始堆內存 默認物理內存1/64,也是最小分配堆內存。當空餘堆內存小於40%時,會增長到-Xms的最大限制 

       -Xmx 最大堆內存分配 默認物理內存1/4,當空餘堆內存大於70%時,會減少到-Xms的最小限制。
       通常設置 -Xms和Xms大小相等

 

       ---- 非堆內存設置
      -XX:PermSize 非堆內存的初始值,默認物理內存的1/64 ,也是最小非堆內存。
      -XX:MaxPermSize 非堆內存最大值,默認物理內存的1/4,


5. 典型JVM參數設置:

      java -Xmx128m -Xms128m -Xmn64m -Xss1m

      -Xmx128m:設置JVM最大可用內存爲128M。

      -Xms128m:設置JVM最小內存爲128m。此值能夠設置與-Xmx相同,以免每次垃圾回收完成後JVM從新分配內存。

      -Xmn2g:設置年輕代大小爲2G。整個堆大小=年輕代大小 + 年老代大小 + 持久代大小。持久代通常固定大小爲64m,因此增大年輕代後,將會減少年老代大小。此值對系統性能影響較大,Sun官方推薦配置爲整個堆的3/8。

      -Xss128k:設置每一個線程的堆棧大小。JDK5.0之後每一個線程堆棧大小爲1M,之前每一個線程堆棧大小爲256K。根據應用的線程所需內存大小進行調整。在相同物理內存下,減少這個值能生成更多的線程。可是操做系統對一個進程內的線程數仍是有限制的,不能無限生成,經驗值在3000~5000左右。

 

      -- Ratio 英音:['reiseu] 比率
      -- Eden 伊甸
      -- Survivor 倖存者

      java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0

      -XX:NewRatio=4:設置年輕代(包括Eden和兩個Survivor區)與年老代的比值(除去持久代)。設置爲4,則年輕代與年老代所佔比值爲1:4,年輕代佔整個堆棧的1/5

      -XX:SurvivorRatio=4:設置年輕代中Eden區與Survivor區的大小比值。設置爲4,則兩個Survivor區與一個Eden區的比值爲2:4,一個Survivor區佔整個年輕代的1/6

      -XX:MaxPermSize=16m:設置持久代大小爲16m。

      -XX:MaxTenuringThreshold=0:設置垃圾最大年齡。若是設置爲0的話,則年輕代對象不通過Survivor區,直接進入年老代。
    對於年老代比較多的應用,能夠提升效率。若是將此值設置爲一個較大值,則年輕代對象會在Survivor區進行屢次複製,這樣能夠增長對象再年輕代的存活時間,增長在年輕代即被回收的概論。

相關文章
相關標籤/搜索