1、設置JVM內存設置
1. 設置JVM內存的參數有四個:
-Xmx Java Heap最大值,默認值爲物理內存的1/4,最佳設值應該視物理內存大小及計算機內其餘內存開銷而定;
-Xmx
此設置控制 Java 堆的最大大小。正確調整此參數有助於下降垃圾回收開銷,從而縮短服務器響應時間並提
高吞吐量。
對於某些應用程序來講,此選項的缺省設置可能會過低,從而致使發生大量小型垃圾回收。
缺省值: 512 MB
建議值: 隨工做負載的不一樣而有所變化,但高於缺省值。
用法: -Xmx512m 將最大堆大小設置爲 512 兆字節
-Xms Java Heap初始值,Server端JVM最好將-Xms和-Xmx設爲相同值,開發測試機JVM能夠保留默認值;
設置堆大小 下列命令行參數對於設置堆大小來講頗有用。
-Xms
此設置控制 Java 堆的初始大小。正確調整此參數有助於下降垃圾回收開銷,從而縮短服務器響應時間並提升
吞吐量。
對於某些應用程序來講,此選項的缺省設置可能會過低,從而致使發生大量小型垃圾回收。
缺省值: 256 MB
建議值: 隨工做負載的不一樣而有所變化,但高於缺省值。
用法: -Xms256m 將初始堆大小設置爲 256 兆字節
-Xmn Java Heap Young區大小,不熟悉最好保留默認值;
-Xmn
此設置控制容許新生成的對象在堆中耗用的空間量。正確調整此參數有助於下降垃圾回收開銷,從而縮短服務
器響應時間並提升吞吐 量。此參數的缺省設置一般太低,這將致使執行大量的小型垃圾回收操做。若是將此參
數設置得太高,可能會致使 JVM 僅執行大型( 全面)垃圾回收。這些垃圾回收操做一般會耗時幾秒鐘,這將
嚴重影響服務器的總體性能。您必須保持將此參數設置爲小於整個堆大 小的一半,以免這種狀況出現。
缺省值: 2228224 字節
建議值: 大約整個堆大小的 1/4
用法: -Xmn256m 將大小設置爲 256 兆字節。
-Xss 每一個線程的Stack大小,不熟悉最好保留默認值;
2. 如何設置JVM內存分配:
(1)當在命令提示符下啓動並使用JVM時(只對當前運行的類Test生效):
java -Xmx128m -Xms64m -Xmn32m -Xss16m Test
(2)當在集成開發環境下(如eclipse)啓動並使用JVM時:
a. 在eclipse根目錄下打開eclipse.ini,默認內容爲(這裏設置的是運行當前開發工具的JVM內存分配):
1.-vmargs 2.-Xms40m 3.-Xmx256m -vmargs表示如下爲虛擬機設置參數,可修改其中的參數值,也可添加-Xmn,-Xss,另外,eclipse.ini內還能夠設置非堆內存,如:-XX:PermSize=56m,-XX:MaxPermSize=128m。
此處設置的參數值能夠經過如下配置在開發工具的狀態欄顯示:
在eclipse根目錄下建立文件options,文件內容爲:org.eclipse.ui/perf/showHeapStatus=true
修改eclipse根目錄下的eclipse.ini文件,在開頭處添加以下內容:
1.-debug 2.options 3.-vm 4.javaw.exe 從新啓動eclipse,就能夠看到下方狀態條多了JVM信息。
b. 打開eclipse-窗口-首選項-Java-已安裝的JRE(對在當前開發環境中運行的java程序皆生效)
編輯當前使用的JRE,在缺省VM參數中輸入:-Xmx128m -Xms64m -Xmn32m -Xss16m
c. 打開eclipse-運行-運行-Java應用程序(只對所設置的java類生效)
選定需設置內存分配的類-自變量,在VM自變量中輸入:-Xmx128m -Xms64m -Xmn32m -Xss16m
注:若是在同一開發環境中同時進行了b和c設置,則b設置生效,c設置無效,如:
開發環境的設置爲:-Xmx256m,而類Test的設置爲:-Xmx128m -Xms64m,則運行Test時生效的設置爲:
-Xmx256m -Xms64m
(3)當在服務器環境下(如Tomcat)啓動並使用JVM時(對當前服務器環境下因此Java程序生效):
a. 設置環境變量:
變量名:CATALINA_OPTS
變量值:-Xmx128m -Xms64m -Xmn32m -Xss16m
b. 打開Tomcat根目錄下的bin文件夾,編輯catalina.bat,將其中的%CATALINA_OPTS%(共有四處)替換爲:-Xmx128m -Xms64m -Xmn32m -Xss16m
2、查看設置JVM內存信息
Runtime.getRuntime().maxMemory(); //最大可用內存,對應-Xmx
Runtime.getRuntime().freeMemory(); //當前JVM空閒內存
Runtime.getRuntime().totalMemory(); //當前JVM佔用的內存總數,其值至關於當前JVM已使用的內存及freeMemory()的總和
關於maxMemory(),freeMemory()和totalMemory():
maxMemory()爲JVM的最大可用內存,可經過-Xmx設置,默認值爲物理內存的1/4,設值不能高於計算機物理內存;
totalMemory()爲當前JVM佔用的內存總數,其值至關於當前JVM已使用的內存及freeMemory()的總和,會隨着JVM使用內存的增長而增長;
freeMemory()爲當前JVM空閒內存,由於JVM只有在須要內存時才佔用物理內存使用,因此freeMemory()的值通常狀況下都很小,而JVM實際可用內存並不等於freeMemory(),而應該等於maxMemory()-totalMemory()+freeMemory()。及其設置JVM內存分配。
或者,用java -X 命令查看JVM的配置說明:
運行後以下結果,這些就是配置JVM參數的祕密武器,這些信息都是英文的,爲了方便閱讀,我根據本身的理解翻譯成中文了(不許確的地方還請各位博友斧正)
-----------------------------------------------------------------------
D:\j2sdk15\bin>java -X
-Xmixed mixed mode execution (default)
-Xint interpreted mode execution only
-Xbootclasspath:<directories and zip/jar files separated by ;>
set search path for bootstrap classes and resources
-Xbootclasspath/a:<directories and zip/jar files separated by ;>
append to end of bootstrap class path
-Xbootclasspath/p:<directories and zip/jar files separated by ;>
prepend in front of bootstrap class path
-Xnoclassgc disable class garbage collection
-Xincgc enable incremental garbage collection
-Xloggc:<file> log GC status to a file with time stamps
-Xbatch disable background compilation
-Xms<size> set initial Java heap size
-Xmx<size> set maximum Java heap size
-Xss<size> set java thread stack size
-Xprof output cpu profiling data
-Xfuture enable strictest checks, anticipating future default
-Xrs reduce use of OS signals by Java/VM (see documentation)
-Xcheck:jni perform additional checks for JNI functions
-Xshare:off do not attempt to use shared class data
-Xshare:auto use shared class data if possible (default)
-Xshare:on require using shared class data, otherwise fail.
The -X options are non-standard and subject to change without notice.
-----------------------------------------------------------------------
JVM配置參數中文說明:
-----------------------------------------------------------------------
一、-Xmixed mixed mode execution (default)
混合模式執行
二、-Xint interpreted mode execution only
解釋模式執行
三、-Xbootclasspath:<directories and zip/jar files separated by ;>
set search path for bootstrap classes and resources
設置zip/jar資源或者類(.class文件)存放目錄路徑
三、-Xbootclasspath/a:<directories and zip/jar files separated by ;>
append to end of bootstrap class path
追加zip/jar資源或者類(.class文件)存放目錄路徑
四、-Xbootclasspath/p:<directories and zip/jar files separated by ;>
prepend in front of bootstrap class path
預先加載zip/jar資源或者類(.class文件)存放目錄路徑
五、-Xnoclassgc disable class garbage collection
關閉類垃圾回收功能
六、-Xincgc enable incremental garbage collection
開啓類的垃圾回收功能
七、-Xloggc:<file> log GC status to a file with time stamps
記錄垃圾回日誌到一個文件。
八、-Xbatch disable background compilation
關閉後臺編譯
九、-Xms<size> set initial Java heap size
設置JVM初始化堆內存大小
十、-Xmx<size> set maximum Java heap size
設置JVM最大的堆內存大小
十一、-Xss<size> set java thread stack size
設置JVM棧內存大小
十二、-Xprof output cpu profiling data
輸入CPU概要表數據
1三、-Xfuture enable strictest checks, anticipating future default
執行嚴格的代碼檢查,預測可能出現的狀況
1四、-Xrs reduce use of OS signals by Java/VM (see documentation)
經過JVM還原操做系統信號
1五、-Xcheck:jni perform additional checks for JNI functions
對JNI函數執行檢查
1六、-Xshare:off do not attempt to use shared class data
儘量不去使用共享類的數據
1七、-Xshare:auto use shared class data if possible (default)
儘量的使用共享類的數據
1八、-Xshare:on require using shared class data, otherwise fail.
儘量的使用共享類的數據,不然運行失敗
The -X options are non-standard and subject to change without notice.
-----------------------------------------------------------------------
怎麼用這這些參數呢?其實全部的命令行都是這麼一用,下面我就給出一個最簡單的HelloWorl的例子來演示這個參數的用法,很是的簡單。
HelloWorld.java
-----------------------------------------------
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
編譯並運行:
D:\j2sdk15\bin>javac HelloWorld.java
D:\j2sdk15\bin>java -Xms256M -Xmx512M HelloWorld
Hello World!java