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.避免显式申请数组空间,不得不显式申请时,尽量准确估计其合理值。
分享到:
相关推荐
- `spark.eventLog.enabled`: 是否开启事件日志,便于事后分析和调试。 - `spark.ui.showConsoleProgress`: 是否在控制台显示进度条。 3. **高级配置与调优** - `spark.sql.broadcastTimeout`: 广播JOIN操作的...
hadoop2.7.2gz文件
基于Netty实现的MQTT客户端_netty-mqtt-client
要开始使用"Spark-xzc",首先需要下载并解压提供的"spark-xzc-master"压缩包。接下来,你需要一个支持Scala和Spark的开发环境,如IntelliJ IDEA或Eclipse,安装相应的Scala和Spark插件。然后导入项目,根据项目的...
Zookeeper是Apache软件基金会开发的一个分布式协调服务,它在分布式系统中扮演着至关重要的角色。Zookeeper提供了一种中心化的服务,用于命名、配置管理、分布式同步和组服务。这两个版本,Zookeeper-3.4.10和...
解决安装hive后,没有hive-site.xml的问题;把这个文件复制到conf的目录下,根据自己的配置更改下里面的部分内容就可以了
- 源码文件:可能包含Java源代码,按照模块划分,如"src/main/java"目录下的"ClubManagementService.java"、"StudentInfoController.java"等。 - 数据库文件:可能有SQL脚本文件,用于创建数据库表结构和初始数据,...
" | mysql xzc_db -uxzc -pxzcpwd'` 是在远程服务器上执行的命令,它将SQL查询(选取user表的所有记录)传递给MySQL,并输出结果。 4. `>` 将输出重定向到本地的`user.txt`文件。 如果想要将数据导出为Excel格式,...
首先,安装Hadoop 2.7.5前需要确保系统已经安装了Java运行环境(JRE)和Java开发工具(JDK),因为Hadoop是基于Java编写的。安装JDK后,设置JAVA_HOME环境变量,将其指向JDK的安装路径,确保系统能够找到Java环境。 ...
编译器(scalac)将Scala源代码转换为Java字节码,使其能在Java虚拟机(JVM)上运行。标准库提供了许多基本的类和功能,如集合操作、IO和网络编程等。 "scala2.12.11-source"文件则包含了Scala 2.12.11的源代码,这...
《Java运动会管理系统详解》 Java运动会管理系统是一款基于Java技术实现的软件应用,它集成了运动员信息管理、赛事安排、成绩统计、信息发布等功能,为组织和管理体育赛事提供了便捷高效的工具。该系统通常包括前端...
【Java版本银行管理系统】是一个基于Java编程语言开发的软件应用,专为模拟和管理银行日常运营而设计。这个系统展示了Java在实际项目中的应用,尤其是作为教学材料用于【Java课程设计】,帮助学生理解如何利用Java来...
Java在线考试系统是一种基于Web的应用程序,用于进行远程学习和评估学生的知识掌握情况。这个压缩包包含了一个完整的Java实现的在线考试系统源码,以及相关的数据库脚本,非常适合Java课程设计或毕业设计项目。下面...
<img src="http://tva2.sinaimg.cn/crop.0.0.180.180.180/6830a53bjw8f2qo4xzc2zj20500500t0.jpg"/> <div class="light-inner"> 前端开发博客 关注前端开发 ``` 接下来,我们编写CSS样式来实现发光边框。...
Java在线考试系统是一种基于J2EE技术开发的Web应用程序,旨在提供一个平台,让学生和教师进行在线测试和评估。这个DEMO源码是为毕业设计而准备的,可以帮助学生理解和学习如何构建这样的系统。让我们深入探讨一下这...
- **圆柱面**: 可分为X、Y、Z轴方向的圆柱面,分别使用关键字“xyc”、“xzc”和“yzc”。 - **球面**: 使用关键字“s”定义,形式为:`s x y z r`。 - **锥面**: 可分为X、Y、Z轴方向的锥面,分别使用关键字“xc”...
文本界面,也称为命令行界面(CLI),是一种用户通过输入命令来操作系统的用户界面。与图形用户界面(GUI)相比,CLI通常更简洁、快速,且在资源有限的环境中更为高效。在Java SE环境下,我们可以使用Java的标准库`...
Apare_xzc 2020.2.20 13:17 前言: 博主xzc是一个魔方爱好者,三阶sub 25s。虽然水平不高,但是对魔方十分热爱。博主对二阶魔方编码,然后通过bfs得到了二阶魔方的全部状态。 下面是得到的最少步打乱。 最少步...