JDK工具 java命令詳解
一、查看用法
C:\>java -help
Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
where options include:
-client to select the "client" VM
-server to select the "server" VM
-hotspot is a synonym for the "client" VM [deprecated]
The default VM is client.
-cp <class search path of directories and zip/jar files>
-classpath <class search path of directories and zip/jar files>
A ; separated list of directories, JAR archives,
and ZIP archives to search for class files.
-D<name>=<value>
set a system property
-verbose[:class|gc|jni]
enable verbose output
-version print product version and exit
-version:<value>
require the specified version to run
-showversion print product version and continue
-jre-restrict-search | -jre-no-restrict-search
include/exclude user private JREs in the version search
-? -help print this help message
-X print help on non-standard options
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
enable assertions
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
disable assertions
-esa | -enablesystemassertions
enable system assertions
-dsa | -disablesystemassertions
disable system assertions
-agentlib:<libname>[=<options>]
load native agent library <libname>, e.g. -agentlib:hprof
see also, -agentlib:jdwp=help and -agentlib:hprof=help
-agentpath:<pathname>[=<options>]
load native agent library by full pathname
-javaagent:<jarpath>[=<options>]
load Java programming language agent, see java.lang.instrument
這個命令幫助是英文的,不知道JDK咋搞的,也不妨礙使用。
另外,這個命令的非標(biāo)準(zhǔn)選項也是很重要的,常常在JVM優(yōu)化配置方面很關(guān)鍵,可以參看本人的JVM參數(shù)配置文章。
C:\myproject>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.
二、實踐
老規(guī)矩,主要看看里面的參數(shù)(也叫開關(guān))的使用。環(huán)境接著上篇javac的環(huán)境。
1、無參數(shù)情況
2、-cp
運行Java要使用類的全名來運行。如果遇到文件夾,則需要-cp設(shè)置到頂級包下面,例如
3、-D
設(shè)置一個系統(tǒng)屬性,在運行時候,可以通過System.getProperties()來獲取到。例如寫一段代碼:
package com.lavasoft;
import java.util.Properties;
/**
* 列舉系統(tǒng)的屬性
* User: leizhimin
* Date: 2008-11-12 21:25:08
*/
public class TestProperty {
public static void main(String[] args) {
//獲取系統(tǒng)屬性
Properties prop = System.getProperties();
//輸出所有到一個流上,
prop.list(System.out);
}
}
如果在運行的時候加上一個參數(shù)-DmyProp=999999999,注意,中間不要添加任何空格。這樣就相當(dāng)于設(shè)置了一個系統(tǒng)屬性myProp,其值為999999999。
一旦通過-DmyProp=999999999設(shè)置了這個系統(tǒng)屬性,在程序中就可以獲取到這個屬性。
3、程序入?yún)?/div>
是在運行的時候,給main方法傳遞參數(shù)。為了測試先寫一個測試類。
package com.lavasoft;
/**
* 測試main方法的入?yún)?
* User: leizhimin
* Date: 2008-11-12 21:46:21
*/
public class TestMainVar {
public static void main(String[] args) {
System.out.println("入?yún)⒘斜砣缦拢?);
for(String arg:args){
System.out.println(arg);
}
}
}
4、其他的選項
有關(guān)選擇 客戶端/服務(wù)端VM、版本、運行在哪個版本下、是否使用斷言等一些不常用的選項。還可以查看
5、-verbose[:class|gc|jni]
查看虛擬機(jī)內(nèi)部動作。
posted on 2009-12-04 17:15
xzc 閱讀(18006)
評論(4) 編輯 收藏 所屬分類:
Java
評論:
# re: java命令詳解
2009-12-04 17:24 |
/bea/bea/jdk150_10/bin/java -server -Xms1024m -Xmx1024m -XX:MaxPermSize=256m -DIBSS_HOME=/bea/odsapp
-Xms1024m 初始化內(nèi)存
-Xmx1024m 最大內(nèi)存
-DIBSS_HOME=/bea/odsapp
IBSS_HOME屬性,通System.getProperties()來可獲得.
回復(fù) 更多評論
# re: java命令詳解
2009-12-04 17:24 |
1.4.1 JVM堆大小的調(diào)整
Sun HotSpot 1.4.1使用分代收集器,它把堆分為三個主要的域:新域、舊域以及永久域。JVM生成的所有新對象放在新域中。一旦對象經(jīng)歷了一定數(shù)量的垃圾收集循環(huán)后,便獲得使用期并進(jìn)入舊域。
在永久域中JVM則存儲class和method對象。就配置而言,永久域是一個獨立域并且不認(rèn)為是堆的一部分。下面介紹如何控制這些域的大小。可使用-Xms和-Xmx 控制整個堆的原始大小或最大值。
下面的命令是把初始大小設(shè)置為128M:
Java –Xms128m
–Xmx256m為控制新域的大小,可使用-XX:NewRatio設(shè)置新域在堆中所占的比例。下面的命令把整個堆設(shè)置成128m,新域比率設(shè)置成3,即新域與舊域比例為1:3,新域為堆的1/4或32M:
Java –Xms128m –Xmx128m
–XX:NewRatio =3可使用-XX:NewSize和-XX:MaxNewsize設(shè)置新域的初始值和最大值。
下面的命令把新域的初始值和最大值設(shè)置成64m:
Java –Xms256m –Xmx256m –Xmn64m
永久域默認(rèn)大小為4m。運行程序時,JVM會調(diào)整永久域的大小以滿足需要。每次調(diào)整時,JVM會對堆進(jìn)行一次完全的垃圾收集。
使用-XX:MaxPerSize標(biāo)志來增加永久域搭大小。在WebLogic Server應(yīng)用程序加載較多類時,經(jīng)常需要增加永久域的最大值。當(dāng)JVM加載類時,永久域中的對象急劇增加,從而使JVM不斷調(diào)整永久域大小。為了避免調(diào)整,可使用-XX:PerSize標(biāo)志設(shè)置初始值。下面把永久域初始值設(shè)置成32m,最大值設(shè)置成64m。
Java -Xms512m -Xmx512m -Xmn128m
-XX:PermSize=32m
-XX:MaxPermSize=64m
默認(rèn)狀態(tài)下,HotSpot在新域中使用復(fù)制收集器。該域一般分為三個部分。第一部分為Eden,用于生成新的對象。另兩部分稱為救助空間,當(dāng)Eden充滿時,收集器停止應(yīng)用程序,把所有可到達(dá)對象復(fù)制到當(dāng)前的from救助空間,一旦當(dāng)前的from救助空間充滿,收集器則把可到達(dá)對象復(fù)制到當(dāng)前的to救助空間。
From和to救助空間互換角色。維持活動的對象將在救助空間不斷復(fù)制,直到它們獲得使用期并轉(zhuǎn)入舊域。使用-XX:SurvivorRatio可控制新域子空間的大小。
同NewRation一樣,SurvivorRation規(guī)定某救助域與Eden空間的比值。比如,以下命令把新域設(shè)置成64m,Eden占32m,每個救助域各占16m:
Java -Xms256m -Xmx256m -Xmn64m
-XX:SurvivorRation =2
如前所述,默認(rèn)狀態(tài)下HotSpot對新域使用復(fù)制收集器,對舊域使用標(biāo)記-清除-壓縮收集器。在新域中使用復(fù)制收集器有很多意義,因為應(yīng)用程序生成的大部分對象是短壽命的。理想狀態(tài)下,所有過渡對象在移出Eden空間時將被收集。
如果能夠這樣的話,并且移出Eden空間的對象是長壽命的,那么理論上可以立即把它們移進(jìn)舊域,避免在救助空間反復(fù)復(fù)制。但是,應(yīng)用程序不能適合這種理想狀態(tài),因為它們有一小部分中長壽命的對象。
最好是保持這些中長壽命的對象并放在新域中,因為復(fù)制小部分的對象總比壓縮舊域廉價。為控制新域中對象的復(fù)制,可用-XX:TargetSurvivorRatio控制救助空間的比例(該值是設(shè)置救助空間的使用比例。
如救助空間位1M,該值50表示可用500K)。該值是一個百分比,默認(rèn)值是50。當(dāng)較大的堆棧使用較低的sruvivorratio時,應(yīng)增加該值到80至90,以更好利用救助空間。用-XX:maxtenuring threshold可控制上限。
為放置所有的復(fù)制全部發(fā)生以及希望對象從eden擴(kuò)展到舊域,可以把MaxTenuring Threshold設(shè)置成0。設(shè)置完成后,實際上就不再使用救助空間了,因此應(yīng)把SurvivorRatio設(shè)成最大值以最大化Eden空間,設(shè)置如下:
Java … -XX:MaxTenuringThreshold=0
–XX:SurvivorRatio=50000 …
回復(fù) 更多評論
# re: java命令詳解
2009-12-04 17:25 |
眾所周知,java的JVM有一套自己的垃圾回收機(jī)制。因此在許多情況下并不需要java程序開發(fā)人員操太多的心。然而也許也因為這樣,往往會造成java程序員的過分依賴而致使開發(fā)出來的程序得不到很好的優(yōu)化,或者說性能尚能提高。
問題的關(guān)鍵在于,不論JVM的垃圾回收機(jī)制做得多好,計算機(jī)的硬件資源是有限的。內(nèi)存更是一項緊張資源。因此雖然JVM為我們完成了大部分的垃圾回收。但適當(dāng)?shù)刈⒁饩幋a過程中的內(nèi)存管理還是很必要的。這樣能讓JVM回收得更順利更高效。最大限度地提高程序的效率。
mark-1:避免在循環(huán)體內(nèi)創(chuàng)建對象。
……
Object obj = null;//方式一
for(int i =0; i 91k(1984k),0.0027537 secs]
……
可以看到總共有1984kb的內(nèi)存被回收,耗時0.0027537秒。
JVM內(nèi)存相關(guān)的參數(shù)
-XX:NewSize(Set the Newgeneralnation heap size)
-XX:MaxNewSize(Set the Maximum Newgeneralnation heap size)
-XX:SurvivorRatio(Set New heap size ratios)
-Xms(Set minimum heap size)
-Xmx(Set maximum heap size)
-Xnoclassgc(取消垃圾回收)
-Xss(設(shè)置棧內(nèi)存的大小)
例:java -XX:NewSize = 128m -XX:MaxNewSize = 128m - XX:SurvivorRatio = 8 -Xms 512m -Xmx 512m MyApplication
mark-8:不同編譯方法的類大小
(1)默認(rèn)編譯方式:javac K.java
長度=代碼+源文件信息+代碼行序號表
(2)調(diào)試編譯方式:javac -g K.java
長度=代碼+源文件信息+代碼行序號表+本地變量表
(3)代碼編譯方式:javax -g:none K.java
長度=代碼
mark-9:經(jīng)驗之談
1.盡早釋放無用對象的引用(XX = null; )
2.盡量少使用finalize函數(shù)。
3.注意集合數(shù)據(jù)類型,如數(shù)組,樹,圖,鏈表等數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)對GC來說回收更復(fù)雜。
4.避免在類的默認(rèn)構(gòu)造器中創(chuàng)建大量的,初始化大量的對象。
5.避免強制系統(tǒng)做垃圾內(nèi)存回收。
6.避免顯式申請數(shù)組空間,不得不顯式申請時,盡量準(zhǔn)確估計其合理值。
回復(fù) 更多評論
# re: java命令詳解
2015-10-30 08:15 |