隨筆-314  評論-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
           
          這個命令幫助是英文的,不知道JDK咋搞的,也不妨礙使用。
           
          另外,這個命令的非標準選項也是很重要的,常常在JVM優化配置方面很關鍵,可以參看本人的JVM參數配置文章。
          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.
           
           
          二、實踐
           
          老規矩,主要看看里面的參數(也叫開關)的使用。環境接著上篇javac的環境。
           
           
          1、無參數情況
           
          2、-cp
          運行Java要使用類的全名來運行。如果遇到文件夾,則需要-cp設置到頂級包下面,例如
           
          3、-D
          設置一個系統屬性,在運行時候,可以通過System.getProperties()來獲取到。例如寫一段代碼:
          package com.lavasoft;

          import java.util.Properties;

          /**
          * 列舉系統的屬性
          * User: leizhimin
          * Date: 2008-11-12 21:25:08
          */

          public class TestProperty {
                  public static void main(String[] args) {
                          //獲取系統屬性
                          Properties prop = System.getProperties();
                          //輸出所有到一個流上,
                          prop.list(System.out);
                  }
          }
           
           
          如果在運行的時候加上一個參數-DmyProp=999999999,注意,中間不要添加任何空格。這樣就相當于設置了一個系統屬性myProp,其值為999999999。
           
          一旦通過-DmyProp=999999999設置了這個系統屬性,在程序中就可以獲取到這個屬性。
           
          3、程序入參
          是在運行的時候,給main方法傳遞參數。為了測試先寫一個測試類。
          package com.lavasoft;

          /**
          * 測試main方法的入參
          * User: leizhimin
          * Date: 2008-11-12 21:46:21
          */

          public class TestMainVar {
                  public static void main(String[] args) {
                          System.out.println("入參列表如下:");
                          for(String arg:args){
                                  System.out.println(arg);
                          }
                  }
          }
           
           
          4、其他的選項
          有關選擇 客戶端/服務端VM、版本、運行在哪個版本下、是否使用斷言等一些不常用的選項。還可以查看
           
           
          5、-verbose[:class|gc|jni]
          查看虛擬機內部動作。
           
           
           
          posted on 2009-12-04 17:15 xzc 閱讀(18017) 評論(4)  編輯  收藏 所屬分類: Java

          評論:
          # 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 初始化內存
          -Xmx1024m 最大內存
          -DIBSS_HOME=/bea/odsapp
          IBSS_HOME屬性,通System.getProperties()來可獲得.
            回復  更多評論
            
          # re: java命令詳解 2009-12-04 17:24 | xzc
          1.4.1 JVM堆大小的調整

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

          在永久域中JVM則存儲class和method對象。就配置而言,永久域是一個獨立域并且不認為是堆的一部分。下面介紹如何控制這些域的大小??墒褂?Xms和-Xmx 控制整個堆的原始大小或最大值。

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



          Java –Xms128m



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



          Java –Xms128m –Xmx128m



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

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



          Java –Xms256m –Xmx256m –Xmn64m



          永久域默認大小為4m。運行程序時,JVM會調整永久域的大小以滿足需要。每次調整時,JVM會對堆進行一次完全的垃圾收集。

          使用-XX:MaxPerSize標志來增加永久域搭大小。在WebLogic Server應用程序加載較多類時,經常需要增加永久域的最大值。當JVM加載類時,永久域中的對象急劇增加,從而使JVM不斷調整永久域大小。為了避免調整,可使用-XX:PerSize標志設置初始值。下面把永久域初始值設置成32m,最大值設置成64m。



          Java -Xms512m -Xmx512m -Xmn128m

          -XX:PermSize=32m

          -XX:MaxPermSize=64m



          默認狀態下,HotSpot在新域中使用復制收集器。該域一般分為三個部分。第一部分為Eden,用于生成新的對象。另兩部分稱為救助空間,當Eden充滿時,收集器停止應用程序,把所有可到達對象復制到當前的from救助空間,一旦當前的from救助空間充滿,收集器則把可到達對象復制到當前的to救助空間。

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

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



          Java -Xms256m -Xmx256m -Xmn64m

          -XX:SurvivorRation =2



          如前所述,默認狀態下HotSpot對新域使用復制收集器,對舊域使用標記-清除-壓縮收集器。在新域中使用復制收集器有很多意義,因為應用程序生成的大部分對象是短壽命的。理想狀態下,所有過渡對象在移出Eden空間時將被收集。

          如果能夠這樣的話,并且移出Eden空間的對象是長壽命的,那么理論上可以立即把它們移進舊域,避免在救助空間反復復制。但是,應用程序不能適合這種理想狀態,因為它們有一小部分中長壽命的對象。

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

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

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



          Java … -XX:MaxTenuringThreshold=0

          –XX:SurvivorRatio=50000 …

            回復  更多評論
            
          # re: java命令詳解 2009-12-04 17:25 | xzc
          眾所周知,java的JVM有一套自己的垃圾回收機制。因此在許多情況下并不需要java程序開發人員操太多的心。然而也許也因為這樣,往往會造成java程序員的過分依賴而致使開發出來的程序得不到很好的優化,或者說性能尚能提高。
          問題的關鍵在于,不論JVM的垃圾回收機制做得多好,計算機的硬件資源是有限的。內存更是一項緊張資源。因此雖然JVM為我們完成了大部分的垃圾回收。但適當地注意編碼過程中的內存管理還是很必要的。這樣能讓JVM回收得更順利更高效。最大限度地提高程序的效率。

          mark-1:避免在循環體內創建對象。

          ……

          Object obj = null;//方式一

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

          ……

          可以看到總共有1984kb的內存被回收,耗時0.0027537秒。

          JVM內存相關的參數

          -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(設置棧內存的大?。?

          例:java -XX:NewSize = 128m -XX:MaxNewSize = 128m - XX:SurvivorRatio = 8 -Xms 512m -Xmx 512m MyApplication

          mark-8:不同編譯方法的類大小

          (1)默認編譯方式:javac K.java

          長度=代碼+源文件信息+代碼行序號表

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

          長度=代碼+源文件信息+代碼行序號表+本地變量表

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

          長度=代碼

          mark-9:經驗之談

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

          2.盡量少使用finalize函數。

          3.注意集合數據類型,如數組,樹,圖,鏈表等數據結構,這些數據結構對GC來說回收更復雜。

          4.避免在類的默認構造器中創建大量的,初始化大量的對象。

          5.避免強制系統做垃圾內存回收。

          6.避免顯式申請數組空間,不得不顯式申請時,盡量準確估計其合理值。

            回復  更多評論
            
          # re: java命令詳解 2015-10-30 08:15 | 黃浩
          大家好才是真的好  回復  更多評論
            
          主站蜘蛛池模板: 安阳县| 乌鲁木齐县| 徐水县| 灵石县| 新宾| 札达县| 清河县| 浠水县| 德清县| 潮州市| 卢龙县| 永丰县| 凌云县| 连云港市| 望城县| 峨眉山市| 仲巴县| 谢通门县| 云南省| 共和县| 陆丰市| 通山县| 扎鲁特旗| 绿春县| 乐安县| 游戏| 山丹县| 平远县| 晋城| 湖南省| 崇文区| 全椒县| 宝兴县| 文水县| 通山县| 广东省| 德昌县| 惠水县| 越西县| 陆川县| 石屏县|