`
wjm0729
  • 浏览: 15459 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

java 命令 -- 转 XZC.Log

    博客分类:
  • java
阅读更多

 

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]
查看虚拟机内部动作。

----------------------------------------------------------------------------------------

/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()来可获得. 

-----------------------------------------------------------------------------------------
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 … 

-----------------------------------------------------------------------------------------
众所周知,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.避免显式申请数组空间,不得不显式申请时,尽量准确估计其合理值。


分享到:
评论

相关推荐

    Spark3.0.0配置文件.zip

    - `spark.eventLog.enabled`: 是否开启事件日志,便于事后分析和调试。 - `spark.ui.showConsoleProgress`: 是否在控制台显示进度条。 3. **高级配置与调优** - `spark.sql.broadcastTimeout`: 广播JOIN操作的...

    hadoop-2.7.2.tar.gz

    hadoop2.7.2gz文件

    基于Netty实现的MQTT客户端_netty-mqtt-client.zip

    基于Netty实现的MQTT客户端_netty-mqtt-client

    spark-xzc:星火xzc

    要开始使用"Spark-xzc",首先需要下载并解压提供的"spark-xzc-master"压缩包。接下来,你需要一个支持Scala和Spark的开发环境,如IntelliJ IDEA或Eclipse,安装相应的Scala和Spark插件。然后导入项目,根据项目的...

    Zookeeper-3.4.10和Zookeeper-3.5.7.zip

    Zookeeper是Apache软件基金会开发的一个分布式协调服务,它在分布式系统中扮演着至关重要的角色。Zookeeper提供了一种中心化的服务,用于命名、配置管理、分布式同步和组服务。这两个版本,Zookeeper-3.4.10和...

    hive-site.xml

    解决安装hive后,没有hive-site.xml的问题;把这个文件复制到conf的目录下,根据自己的配置更改下里面的部分内容就可以了

    java实现简易社团管理系统.zip

    - 源码文件:可能包含Java源代码,按照模块划分,如"src/main/java"目录下的"ClubManagementService.java"、"StudentInfoController.java"等。 - 数据库文件:可能有SQL脚本文件,用于创建数据库表结构和初始数据,...

    linux下使用ssh远程执行命令批量导出数据库到本地

    " | mysql xzc_db -uxzc -pxzcpwd'` 是在远程服务器上执行的命令,它将SQL查询(选取user表的所有记录)传递给MySQL,并输出结果。 4. `&gt;` 将输出重定向到本地的`user.txt`文件。 如果想要将数据导出为Excel格式,...

    hadoop-2.7.5.zip

    首先,安装Hadoop 2.7.5前需要确保系统已经安装了Java运行环境(JRE)和Java开发工具(JDK),因为Hadoop是基于Java编写的。安装JDK后,设置JAVA_HOME环境变量,将其指向JDK的安装路径,确保系统能够找到Java环境。 ...

    scala2.12.zip

    编译器(scalac)将Scala源代码转换为Java字节码,使其能在Java虚拟机(JVM)上运行。标准库提供了许多基本的类和功能,如集合操作、IO和网络编程等。 "scala2.12.11-source"文件则包含了Scala 2.12.11的源代码,这...

    Java 运动会管理系统.zip

    《Java运动会管理系统详解》 Java运动会管理系统是一款基于Java技术实现的软件应用,它集成了运动员信息管理、赛事安排、成绩统计、信息发布等功能,为组织和管理体育赛事提供了便捷高效的工具。该系统通常包括前端...

    java版本银行管理系统.zip

    【Java版本银行管理系统】是一个基于Java编程语言开发的软件应用,专为模拟和管理银行日常运营而设计。这个系统展示了Java在实际项目中的应用,尤其是作为教学材料用于【Java课程设计】,帮助学生理解如何利用Java来...

    Java 在线考试系统源码 + 数据库脚本.zip

    Java在线考试系统是一种基于Web的应用程序,用于进行远程学习和评估学生的知识掌握情况。这个压缩包包含了一个完整的Java实现的在线考试系统源码,以及相关的数据库脚本,非常适合Java课程设计或毕业设计项目。下面...

    利用CSS3伪元素实现逐渐发光的方格边框

    &lt;img src="http://tva2.sinaimg.cn/crop.0.0.180.180.180/6830a53bjw8f2qo4xzc2zj20500500t0.jpg"/&gt; &lt;div class="light-inner"&gt; 前端开发博客 关注前端开发 ``` 接下来,我们编写CSS样式来实现发光边框。...

    JAVA在线考试系统DEMO源码(毕业设计 J2EE).zip

    Java在线考试系统是一种基于J2EE技术开发的Web应用程序,旨在提供一个平台,让学生和教师进行在线测试和评估。这个DEMO源码是为毕业设计而准备的,可以帮助学生理解和学习如何构建这样的系统。让我们深入探讨一下这...

    an mcnp primer

    - **圆柱面**: 可分为X、Y、Z轴方向的圆柱面,分别使用关键字“xyc”、“xzc”和“yzc”。 - **球面**: 使用关键字“s”定义,形式为:`s x y z r`。 - **锥面**: 可分为X、Y、Z轴方向的锥面,分别使用关键字“xc”...

    基于文本界面的客户信息管理软件

    文本界面,也称为命令行界面(CLI),是一种用户通过输入命令来操作系统的用户界面。与图形用户界面(GUI)相比,CLI通常更简洁、快速,且在资源有限的环境中更为高效。在Java SE环境下,我们可以使用Java的标准库`...

    二阶魔方的最少步打乱 Apare_xzc

    Apare_xzc 2020.2.20 13:17 前言:  博主xzc是一个魔方爱好者,三阶sub 25s。虽然水平不高,但是对魔方十分热爱。博主对二阶魔方编码,然后通过bfs得到了二阶魔方的全部状态。 下面是得到的最少步打乱。  最少步...

Global site tag (gtag.js) - Google Analytics