JAVA虚拟机在启动时允许定制一些参数,以控制虚拟机的运行。启动虚拟机的命令行格式如下:
java -java-virtual-maching-params class-file-to-run program-params
参数说明:
- -server和-client:通知JAVA虚拟机以服务器模式或者以客户机模式运行。使用server模式可以提高性能,启动要比client慢,长期运行则比client模式快。当该参数不指定时,虚拟机则自行检测主机是否为服务器,如果是则以server模式启动,否则以client模式启动。JDK5.0检测的根据是至少2个CPU和最低2G内存。
- -agentlib和-agentpath:加载本地库文件(本地详加文件是指非JAVA语言编写的,供JAVA程序调用的动态链接库文件)的路径。其中-agentlib直接指定库文件名即可,而-agentpath则需要给出完全路径。例如使用如下命令行启动JAVA虚拟机并执行Main程序,则在启动前会在环境变量PATH指向的路径下寻找lin.so:
java -agentlib:lib Main
- -classpath和-cp:指定JAVA类库文件所在路径,也就是通知虚拟机在哪些路径下寻找JAVA类文件。使如,在执行Main的同时需要用到的类文件存在于当前目录(以“.”表示)以及/home/lib.jar文件中,则以下面的方式启动虚拟机:
/* *类路径用;隔开,当前目录是“.”,另一个目录是/home/lib.jar */ java -classpath .;/home/lib.jar Main /* *或者 */ java -cp .;/home/lib.jar Main
- -D:定制系统环境变量。一般来说定制系统的环境变量方式有两种方式:一是在操作系统之上设置,具体设置办法视操作系统的不同而有区别;另一种是如果不希望改变或者增加操作系统的设置,则通过“-D变量名=变量值“的方式设置。无论以哪一种方式,在JAVA程序中都可以通过System.getProperty( String propertyName)来获取变量值:
java -Djava.library.path=/home/lib Main
- -jar:执行包含在.jar文件中的类文件。能够以这种方式执行的.jar文件,其/META-INT/MENIFEST.MF文件中必须声明唯一的Main-Class值。
java -jar myJar
- -version或者-showversion:显示版本信息。其中-version公用来显示版本信息,在显示完毕之后立刻退出。
- -?或者-help:显示帮助信息并退出。
- -X:定制JAVA虚拟机扩展参数。使用的扩展包括以下几个方面:
- Xint:所有字节码以解析模式运行。第一代虚拟机即是以这种方式运行的,由于需要JAVA解析器解析运行,所以效率比较低。第二代虚拟机则采用将字节码编译成本地代码的方式,效率大提高;第三代虚拟机也叫自适应虚拟,通过监测代码的执行情况检测出代码被频繁使用的竞价,将其尽量优化成本地代码方式运行,而对于普通部分,则采用解析的模式运行。
- -Xbatch:禁止后台编译,一般Hotspot虚拟机在检测到一段代码为频繁执行代码需要将其编译成本地代码时,会启动一个后台线程完成这个工作,而同时采用解析的方式继续运行字节码。如果设置该参数,则会停止继续执行字节码,先将其编译成本地代码,然后执行。
- -Xms:指定初始内存堆栈大小,取值必须是1024的倍数。以下取值是合法的:-Xms2048,-Xms2k,-Xms2m。
- -Xmx:指定所允许的最大内存堆栈大小,取值必须是1024的倍数。
- -Xss:每创建一个线程耗费JVM内存,取值必须是1024的倍数。默认是512KB。
- -Xnoclassgc:不启用内存垃圾回收机制。