-classpath,-cp
虛擬機在運行一個類時,需要將其裝入內存,虛擬機搜索類的方式和順序如下:
Bootstrap classes,Extension classes,User classes。
Bootstrap 中的路徑是虛擬機自帶的jar或zip文件,虛擬機首先搜索這些包文件,用System.getProperty("sun.boot.class.path")可得到虛擬機搜索的包名。
Extension是位于jre\lib\ext目錄下的jar文件,虛擬機在搜索完Bootstrap后就搜索該目錄下的jar文件。用System. getProperty("java.ext.dirs”)可得到虛擬機使用Extension搜索路徑。
User classes搜索順序為當前目錄、環(huán)境變量 CLASSPATH、-classpath。
-classpath告知虛擬機搜索目錄名、jar文檔名、zip文檔名,之間用分號;分隔。
例如當你自己開發(fā)了公共類并包裝成一個common.jar包,在使用common.jar中的類時,就需要用-classpath common.jar 告訴虛擬機從common.jar中查找該類,否則虛擬機就會拋出java.lang.NoClassDefFoundError異常,表明未找到類定義。
在運行時可用System.getProperty(“java.class.path”)得到虛擬機查找類的路徑。
使用-classpath后虛擬機將不再使用CLASSPATH中的類搜索路徑,如果-classpath和CLASSPATH都沒有設置,則虛擬機使用當前路徑(.)作為類搜索路徑。
推薦使用-classpath來定義虛擬機要搜索的類路徑,而不要使用環(huán)境變量CLASSPATH的搜索路徑,以減少多個項目同時使用CLASSPATH時存在的潛在沖突。例如應用1要使用a1.0.jar中的類G,應用2要使用a2.0.jar中的類G,a2.0.jar是a1.0.jar的升級包,當a1.0.jar,a2.0.jar都在CLASSPATH中,虛擬機搜索到第一個包中的類G時就停止搜索,如果應用1應用2的虛擬機都從CLASSPATH中搜索,就會有一個應用得不到正確版本的類G。
-verbose[:class|gc|jni]
在輸出設備上顯示虛擬機運行信息。
verbose和verbose:class含義相同,輸出虛擬機裝入的類的信息,顯示的信息格式如下:
[Loaded java.io.FilePermission$1 from shared objects file]
當虛擬機報告類找不到或類沖突時可用此參數(shù)來診斷來查看虛擬機從裝入類的情況。
-verbose:gc在虛擬機發(fā)生內存回收時在輸出設備顯示信息,格式如下:
[Full GC 268K->168K(1984K), 0.0187390 secs]
該參數(shù)用來監(jiān)視虛擬機內存回收的情況。
-verbose:jni在虛擬機調用native方法時輸出設備顯示信息,格式如下:
[Dynamic-linking native method HelloNative.sum ... JNI]
該參數(shù)用來監(jiān)視虛擬機調用本地方法的情況,在發(fā)生jni錯誤時可為診斷提供便利。
-Xloggc:<file>
將虛擬機每次垃圾回收的信息寫到日志文件中,文件名由file指定,文件格式是平文件,內容和-verbose:gc輸出內容相同。
-Xms<size>
設置虛擬機可用內存堆的初始大小,缺省單位為字節(jié),該大小為1024的整數(shù)倍并且要大于1MB,可用k(K)或m(M)為單位來設置較大的內存數(shù)。初始堆大小為2MB。
例如:-Xms6400K,-Xms256M
-Xmx<size>
設置虛擬機內存堆的最大可用大小,缺省單位為字節(jié)。該值必須為1024整數(shù)倍,并且要大于2MB??捎胟(K)或m(M)為單位來設置較大的內存數(shù)。缺省堆最大值為64MB。
例如:-Xmx81920K,-Xmx80M
當應用程序申請了大內存運行時虛擬機拋出java.lang.OutOfMemoryError: Java heap space錯誤,就需要使用-Xmx設置較大的可用內存堆。
-Xms20M -Xmx20M -Xmn10M 堆的大小,最大為20M,新生代10M,不帶空格
-XX:+PrintGCDetails -XX:SurvivorRatio=8 eden與survivor的空間比例是8:1
-Xss<size>
設置線程棧的大小,缺省單位為字節(jié)。與-Xmx類似,也可用K或M來設置較大的值。通常操作系統(tǒng)分配給線程棧的缺省大小為1MB。
另外也可在java中創(chuàng)建線程對象時設置棧的大小,構造函數(shù)原型為Thread(ThreadGroup group, Runnable target, String name, long stackSize)。
http://jportal.javaeye.com/blog/351282