隨筆-314  評(píng)論-209  文章-0  trackbacks-0
          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
           
          這個(gè)命令幫助是英文的,不知道JDK咋搞的,也不妨礙使用。
           
          另外,這個(gè)命令的非標(biāo)準(zhǔn)選項(xiàng)也是很重要的,常常在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.
           
           
          二、實(shí)踐
           
          老規(guī)矩,主要看看里面的參數(shù)(也叫開關(guān))的使用。環(huán)境接著上篇javac的環(huán)境。
           
           
          1、無參數(shù)情況
           
          2、-cp
          運(yùn)行Java要使用類的全名來運(yùn)行。如果遇到文件夾,則需要-cp設(shè)置到頂級(jí)包下面,例如
           
          3、-D
          設(shè)置一個(gè)系統(tǒng)屬性,在運(yùn)行時(shí)候,可以通過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();
                          //輸出所有到一個(gè)流上,
                          prop.list(System.out);
                  }
          }
           
           
          如果在運(yùn)行的時(shí)候加上一個(gè)參數(shù)-DmyProp=999999999,注意,中間不要添加任何空格。這樣就相當(dāng)于設(shè)置了一個(gè)系統(tǒng)屬性myProp,其值為999999999。
           
          一旦通過-DmyProp=999999999設(shè)置了這個(gè)系統(tǒng)屬性,在程序中就可以獲取到這個(gè)屬性。
           
          3、程序入?yún)?/div>
          是在運(yùn)行的時(shí)候,給main方法傳遞參數(shù)。為了測(cè)試先寫一個(gè)測(cè)試類。
          package com.lavasoft;

          /**
          * 測(cè)試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、其他的選項(xiàng)
          有關(guān)選擇 客戶端/服務(wù)端VM、版本、運(yùn)行在哪個(gè)版本下、是否使用斷言等一些不常用的選項(xiàng)。還可以查看
           
           
          5、-verbose[:class|gc|jni]
          查看虛擬機(jī)內(nèi)部動(dòng)作。
           
           
           
          posted on 2009-12-04 17:15 xzc 閱讀(18018) 評(píng)論(4)  編輯  收藏 所屬分類: Java

          評(píng)論:
          # re: java命令詳解 2009-12-04 17:24 | xzc
          /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ù)  更多評(píng)論
            
          # re: java命令詳解 2009-12-04 17:24 | xzc
          1.4.1 JVM堆大小的調(diào)整

          Sun HotSpot 1.4.1使用分代收集器,它把堆分為三個(gè)主要的域:新域、舊域以及永久域。JVM生成的所有新對(duì)象放在新域中。一旦對(duì)象經(jīng)歷了一定數(shù)量的垃圾收集循環(huán)后,便獲得使用期并進(jìn)入舊域。

          在永久域中JVM則存儲(chǔ)class和method對(duì)象。就配置而言,永久域是一個(gè)獨(dú)立域并且不認(rèn)為是堆的一部分。下面介紹如何控制這些域的大小。可使用-Xms和-Xmx 控制整個(gè)堆的原始大小或最大值。

          下面的命令是把初始大小設(shè)置為128M:



          Java –Xms128m



          –Xmx256m為控制新域的大小,可使用-XX:NewRatio設(shè)置新域在堆中所占的比例。下面的命令把整個(gè)堆設(shè)置成128m,新域比率設(shè)置成3,即新域與舊域比例為1:3,新域?yàn)槎训?/4或32M:



          Java –Xms128m –Xmx128m



          –XX:NewRatio =3可使用-XX:NewSize和-XX:MaxNewsize設(shè)置新域的初始值和最大值。

          下面的命令把新域的初始值和最大值設(shè)置成64m:



          Java –Xms256m –Xmx256m –Xmn64m



          永久域默認(rèn)大小為4m。運(yùn)行程序時(shí),JVM會(huì)調(diào)整永久域的大小以滿足需要。每次調(diào)整時(shí),JVM會(huì)對(duì)堆進(jìn)行一次完全的垃圾收集。

          使用-XX:MaxPerSize標(biāo)志來增加永久域搭大小。在WebLogic Server應(yīng)用程序加載較多類時(shí),經(jīng)常需要增加永久域的最大值。當(dāng)JVM加載類時(shí),永久域中的對(duì)象急劇增加,從而使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ù)制收集器。該域一般分為三個(gè)部分。第一部分為Eden,用于生成新的對(duì)象。另兩部分稱為救助空間,當(dāng)Eden充滿時(shí),收集器停止應(yīng)用程序,把所有可到達(dá)對(duì)象復(fù)制到當(dāng)前的from救助空間,一旦當(dāng)前的from救助空間充滿,收集器則把可到達(dá)對(duì)象復(fù)制到當(dāng)前的to救助空間。

          From和to救助空間互換角色。維持活動(dòng)的對(duì)象將在救助空間不斷復(fù)制,直到它們獲得使用期并轉(zhuǎn)入舊域。使用-XX:SurvivorRatio可控制新域子空間的大小。

          同NewRation一樣,SurvivorRation規(guī)定某救助域與Eden空間的比值。比如,以下命令把新域設(shè)置成64m,Eden占32m,每個(gè)救助域各占16m:



          Java -Xms256m -Xmx256m -Xmn64m

          -XX:SurvivorRation =2



          如前所述,默認(rèn)狀態(tài)下HotSpot對(duì)新域使用復(fù)制收集器,對(duì)舊域使用標(biāo)記-清除-壓縮收集器。在新域中使用復(fù)制收集器有很多意義,因?yàn)閼?yīng)用程序生成的大部分對(duì)象是短壽命的。理想狀態(tài)下,所有過渡對(duì)象在移出Eden空間時(shí)將被收集。

          如果能夠這樣的話,并且移出Eden空間的對(duì)象是長壽命的,那么理論上可以立即把它們移進(jìn)舊域,避免在救助空間反復(fù)復(fù)制。但是,應(yīng)用程序不能適合這種理想狀態(tài),因?yàn)樗鼈冇幸恍〔糠种虚L壽命的對(duì)象。

          最好是保持這些中長壽命的對(duì)象并放在新域中,因?yàn)閺?fù)制小部分的對(duì)象總比壓縮舊域廉價(jià)。為控制新域中對(duì)象的復(fù)制,可用-XX:TargetSurvivorRatio控制救助空間的比例(該值是設(shè)置救助空間的使用比例。

          如救助空間位1M,該值50表示可用500K)。該值是一個(gè)百分比,默認(rèn)值是50。當(dāng)較大的堆棧使用較低的sruvivorratio時(shí),應(yīng)增加該值到80至90,以更好利用救助空間。用-XX:maxtenuring threshold可控制上限。

          為放置所有的復(fù)制全部發(fā)生以及希望對(duì)象從eden擴(kuò)展到舊域,可以把MaxTenuring Threshold設(shè)置成0。設(shè)置完成后,實(shí)際上就不再使用救助空間了,因此應(yīng)把SurvivorRatio設(shè)成最大值以最大化Eden空間,設(shè)置如下:



          Java … -XX:MaxTenuringThreshold=0

          –XX:SurvivorRatio=50000 …

            回復(fù)  更多評(píng)論
            
          # re: java命令詳解 2009-12-04 17:25 | xzc
          眾所周知,java的JVM有一套自己的垃圾回收機(jī)制。因此在許多情況下并不需要java程序開發(fā)人員操太多的心。然而也許也因?yàn)檫@樣,往往會(huì)造成java程序員的過分依賴而致使開發(fā)出來的程序得不到很好的優(yōu)化,或者說性能尚能提高。
          問題的關(guān)鍵在于,不論JVM的垃圾回收機(jī)制做得多好,計(jì)算機(jī)的硬件資源是有限的。內(nèi)存更是一項(xiàng)緊張資源。因此雖然JVM為我們完成了大部分的垃圾回收。但適當(dāng)?shù)刈⒁饩幋a過程中的內(nèi)存管理還是很必要的。這樣能讓JVM回收得更順利更高效。最大限度地提高程序的效率。

          mark-1:避免在循環(huán)體內(nèi)創(chuàng)建對(duì)象。

          ……

          Object obj = null;//方式一

          for(int i =0; i 91k(1984k),0.0027537 secs]

          ……

          可以看到總共有1984kb的內(nèi)存被回收,耗時(shí)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

          長度=代碼+源文件信息+代碼行序號(hào)表

          (2)調(diào)試編譯方式:javac -g K.java

          長度=代碼+源文件信息+代碼行序號(hào)表+本地變量表

          (3)代碼編譯方式:javax -g:none K.java

          長度=代碼

          mark-9:經(jīng)驗(yàn)之談

          1.盡早釋放無用對(duì)象的引用(XX = null; )

          2.盡量少使用finalize函數(shù)。

          3.注意集合數(shù)據(jù)類型,如數(shù)組,樹,圖,鏈表等數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)對(duì)GC來說回收更復(fù)雜。

          4.避免在類的默認(rèn)構(gòu)造器中創(chuàng)建大量的,初始化大量的對(duì)象。

          5.避免強(qiáng)制系統(tǒng)做垃圾內(nèi)存回收。

          6.避免顯式申請(qǐng)數(shù)組空間,不得不顯式申請(qǐng)時(shí),盡量準(zhǔn)確估計(jì)其合理值。

            回復(fù)  更多評(píng)論
            
          # re: java命令詳解 2015-10-30 08:15 | 黃浩
          大家好才是真的好  回復(fù)  更多評(píng)論
            
          <2009年12月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(12)

          隨筆分類

          隨筆檔案

          收藏夾

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 广元市| 红原县| 木里| 双牌县| 平湖市| 静海县| 山丹县| 祁门县| 定结县| 珲春市| 阳新县| 江川县| 库车县| 湘西| 木里| 泽普县| 平果县| 吉安市| 亳州市| 论坛| 石林| 剑阁县| 温州市| 称多县| 博乐市| 阳西县| 惠安县| 若羌县| 高安市| 罗甸县| 尤溪县| 汶川县| 邢台市| 桑植县| 外汇| 唐海县| 九台市| 项城市| 拜城县| 布尔津县| 新干县|