- 浏览: 253302 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
mabusyao:
漠北空城 写道请问下,你这个是JDK版本是多少呢?!忘记了,应 ...
HashMap 源码解读 -
漠北空城:
请问下,你这个是JDK版本是多少呢?!
HashMap 源码解读 -
schumee:
完美团队~
项目沉思录 - 1.1 -
winie:
整理下 搞成引擎嘛 国产需要这样的engine
简单工作流引擎 -
mabusyao:
某位同学给我提供的堪称完美的解决方案:1. 将三个int数组放 ...
CraneWork
下面的讨论以Windows平台的Sun MicroSystem实现的java5虚拟机为蓝本,其他操作系统或其他公司实现的虚拟机参数会有部分不同,但大部分含义都和Windows上的类似。Java5与以前版本相比,虚拟机参数大部分保持了向前兼容,同时也增加了一些新的参数,本文将对这些参数的作用作详细描述,使虚拟机能更符合运行环境的需要,获得更好的性能和稳定性。
Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOME\bin\java –option 来启动,-option为虚拟机参数,JAVA_HOME为JDK安装路径,通过这些参数可对虚拟机的运行状态进行调整,掌握参数的含义可对虚拟机的运行模式有更深入理解。
虚拟机参数分为基本和扩展两类,在命令行中输入JAVA_HOME\bin\java 就可得到基本参数列表,
在命令行输入JAVA_HOME\bin\java –X 就可得到扩展参数列表。
基本参数说明:
-client,-server
这两个参数用于设置虚拟机使用何种运行模式,client模式启动比较快,但运行时性能和内存管理效率不如server模式,通常用于客户端应用程序。相反,server模式启动比client慢,但可获得更高的运行性能。
在windows上,缺省的虚拟机类型为client模式,如果要使用server模式,就需要在启动虚拟机时加-server参数,以获得更高性能,对服务器端应用,推荐采用server模式,尤其是多个CPU的系统。在Linux,Solaris上缺省采用server模式。
-hotspot
含义与client相同,jdk1.4以前使用的参数,jdk1.4开始不再使用,代之以client。
-classpath,-cp
虚拟机在运行一个类时,需要将其装入内存,虚拟机搜索类的方式和顺序如下:
Bootstrap classes,Extension classes,User classes。
Bootstrap 中的路径是虚拟机自带的jar或zip文件,虚拟机首先搜索这些包文件,用System.getProperty("sun.boot.class.path")可得到虚拟机搜索的包名。
Extension是位于jre\lib\ext目录下的jar文件,虚拟机在搜索完Bootstrap后就搜索该目录下的jar文件。用System. getProperty("java.ext.dirs”)可得到虚拟机使用Extension搜索路径。
User classes搜索顺序为当前目录、环境变量 CLASSPATH、-classpath。
-classpath告知虚拟机搜索目录名、jar文档名、zip文档名,之间用分号;分隔。
例如当你自己开发了公共类并包装成一个common.jar包,在使用common.jar中的类时,就需要用-classpath common.jar 告诉虚拟机从common.jar中查找该类,否则虚拟机就会抛出java.lang.NoClassDefFoundError异常,表明未找到类定义。
在运行时可用System.getProperty(“java.class.path”)得到虚拟机查找类的路径。
使用-classpath后虚拟机将不再使用CLASSPATH中的类搜索路径,如果-classpath和CLASSPATH都没有设置,则虚拟机使用当前路径(.)作为类搜索路径。
推荐使用-classpath来定义虚拟机要搜索的类路径,而不要使用环境变量CLASSPATH的搜索路径,以减少多个项目同时使用CLASSPATH时存在的潜在冲突。例如应用1要使用a1.0.jar中的类G,应用2要使用a2.0.jar中的类G,a2.0.jar是a1.0.jar的升级包,当a1.0.jar,a2.0.jar都在CLASSPATH中,虚拟机搜索到第一个包中的类G时就停止搜索,如果应用1应用2的虚拟机都从CLASSPATH中搜索,就会有一个应用得不到正确版本的类G。
-D<propertyName>=value
在虚拟机的系统属性中设置属性名/值对,运行在此虚拟机之上的应用程序可用System.getProperty(“propertyName”)得到value的值。
如果value中有空格,则需要用双引号将该值括起来,如-Dname=”space string”。
该参数通常用于设置系统级全局变量值,如配置文件路径,应为该属性在程序中任何地方都可访问。
-verbose[:class|gc|jni]
在输出设备上显示虚拟机运行信息。
verbose和verbose:class含义相同,输出虚拟机装入的类的信息,显示的信息格式如下:
[Loaded java.io.FilePermission$1 from shared objects file]
当虚拟机报告类找不到或类冲突时可用此参数来诊断来查看虚拟机从装入类的情况。
-verbose:gc在虚拟机发生内存回收时在输出设备显示信息,格式如下:
[Full GC 268K->168K(1984K), 0.0187390 secs]
该参数用来监视虚拟机内存回收的情况。
-verbose:jni在虚拟机调用native方法时输出设备显示信息,格式如下:
[Dynamic-linking native method HelloNative.sum ... JNI]
该参数用来监视虚拟机调用本地方法的情况,在发生jni错误时可为诊断提供便利。
-version
显示可运行的虚拟机版本信息然后退出。一台机器上装有不同版本的JDK时
-showversion
显示版本信息以及帮助信息。
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
从JDK1.4开始,java可支持断言机制,用于诊断运行时问题。通常在测试阶段使断言有效,在正式运行时不需要运行断言。断言后的表达式的值是一个逻辑值,为true时断言不运行,为false时断言运行,抛出java.lang.AssertionError错误。
上述参数就用来设置虚拟机是否启动断言机制,缺省时虚拟机关闭断言机制,用-ea可打开断言机制,不加<packagename>和classname时运行所有包和类中的断言,如果希望只运行某些包或类中的断言,可将包名或类名加到-ea之后。例如要启动包com.foo.util中的断言,可用命令 –ea:com.foo.util 。
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
用来设置虚拟机关闭断言处理,packagename和classname的使用方法和-ea相同。
-esa | -enablesystemassertions
设置虚拟机显示系统类的断言。
-dsa | -disablesystemassertions
设置虚拟机关闭系统类的断言。
-agentlib:<libname>[=<options>]
该参数是JDK5新引入的,用于虚拟机装载本地代理库。
Libname为本地代理库文件名,虚拟机的搜索路径为环境变量PATH中的路径,options为传给本地库启动时的参数,多个参数之间用逗号分隔。在Windows平台上虚拟机搜索本地库名为libname.dll的文件,在Unix上虚拟机搜索本地库名为libname.so的文件,搜索路径环境变量在不同系统上有所不同,Linux、SunOS、IRIX上为LD_LIBRARY_PATH,AIX上为LIBPATH,HP-UX上为SHLIB_PATH。
例如可使用-agentlib:hprof来获取虚拟机的运行情况,包括CPU、内存、线程等的运行数据,并可输出到指定文件中,可用-agentlib:hprof=help来得到使用帮助列表。在jre\bin目录下可发现hprof.dll文件。
-agentpath:<pathname>[=<options>]
设置虚拟机按全路径装载本地库,不再搜索PATH中的路径。其他功能和agentlib相同。
-javaagent:<jarpath>[=<options>]
虚拟机启动时装入java语言设备代理。Jarpath文件中的mainfest文件必须有Agent-Class属性。代理类要实现public static void premain(String agentArgs, Instrumentation inst)方法。当虚拟机初始化时,将按代理类的说明顺序调用premain方法。
参见:java.lang.instrument
扩展参数说明
-Xmixed
设置-client模式虚拟机对使用频率高的方式进行Just-In-Time编译和执行,对其他方法使用解释方式执行。该方式是虚拟机缺省模式。
-Xint
设置-client模式下运行的虚拟机以解释方式执行类的字节码,不将字节码编译为本机码。
-Xbootclasspath:path
-Xbootclasspath/a:path
-Xbootclasspath/p:path
改变虚拟机装载缺省系统运行包rt.jar而从-Xbootclasspath中设定的搜索路径中装载系统运行类。除非你自己能写一个运行时,否则不会用到该参数。
/a:将在缺省搜索路径后加上path 中的搜索路径。
/p:在缺省搜索路径前先搜索path中的搜索路径。
-Xnoclassgc
关闭虚拟机对class的垃圾回收功能。
-Xincgc
启动增量垃圾收集器,缺省是关闭的。增量垃圾收集器能减少偶然发生的长时间的垃圾回收造成的暂停时间。但增量垃圾收集器和应用程序并发执行,因此会占用部分CPU在应用程序上的功能。
-Xloggc:<file>
将虚拟机每次垃圾回收的信息写到日志文件中,文件名由file指定,文件格式是平文件,内容和-verbose:gc输出内容相同。
-Xbatch
虚拟机的缺省运行方式是在后台编译类代码,然后在前台执行代码,使用-Xbatch参数将关闭虚拟机后台编译,在前台编译完成后再执行。
-Xms<size>
设置虚拟机可用内存堆的初始大小,缺省单位为字节,该大小为1024的整数倍并且要大于1MB,可用k(K)或m(M)为单位来设置较大的内存数。初始堆大小为2MB。
例如:-Xms6400K,-Xms256M
-Xmx<size>
设置虚拟机内存堆的最大可用大小,缺省单位为字节。该值必须为1024整数倍,并且要大于2MB。可用k(K)或m(M)为单位来设置较大的内存数。缺省堆最大值为64MB。
例如:-Xmx81920K,-Xmx80M
当应用程序申请了大内存运行时虚拟机抛出java.lang.OutOfMemoryError: Java heap space错误,就需要使用-Xmx设置较大的可用内存堆。
-Xss<size>
设置线程栈的大小,缺省单位为字节。与-Xmx类似,也可用K或M来设置较大的值。通常操作系统分配给线程栈的缺省大小为1MB。
另外也可在java中创建线程对象时设置栈的大小,构造函数原型为Thread(ThreadGroup group, Runnable target, String name, long stackSize)。
-Xprof
输出CPU运行时的诊断信息。
-Xfuture
对类文件进行严格格式检查,以保证类代码符合类代码规范。为保持向后兼容,虚拟机缺省不进行严格的格式检查。
-Xrs
减少虚拟机中操作系统的信号(singals)的使用。该参数通常用在虚拟机以后台服务方式运行时使用(如Servlet)。
-Xcheck:jni
调用JNI函数时进行附加的检查,特别地虚拟机将校验传递给JNI函数参数的合法性,在本地代码中遇到非法数据时,虚拟机将报一个致命错误而终止。使用该参数后将造成性能下降。
发表评论
-
各种语言写的wordcount
2015-09-24 16:07 0Java版本: String input ... -
数组双指针算法的研究
2015-07-14 16:59 2461双指针算法在数组/链 ... -
初识ThreadLocal
2015-07-07 13:15 1516最近公司在进行Java开发人员的招聘活动,其中有一道面试题 ... -
摩尔投票法
2015-06-30 20:13 18413摩尔投票法 提问: 给定一个int型数组,找出该数 ... -
小心寄存器
2012-11-08 13:53 4试试这段代码就知道了 public cla ... -
简单工作流引擎
2012-07-06 16:58 2414从公司的一个项目中挖出来的工作流引擎的代码,虽然是一个很简单的 ... -
Always clean the ThreadLocal variables.
2012-05-24 09:16 1217Any variable stored in ThreadLo ... -
STRUTS2 源码 - Logging System
2012-05-24 08:51 1405看了STRUTS2的源码,了解了它的logging系统,觉得还 ... -
在线词典的数据结构实现。
2012-05-18 08:37 0昨天在网上看到了一道百度的面试题: Baidu写道 ... -
Log4j 代码学习 - Factory
2012-05-17 08:47 1109我们最早提到,Log4j的初始代码在LogManager的静态 ... -
Log4j 代码学习 - Appender
2012-05-16 09:09 1356在上一篇文章里,我们 ... -
Log4j 代码学习
2012-05-15 14:58 1162最近闲来无事,正好手头上有Log4j的代码,于是就拿来学习了下 ... -
java7中的ThreadLocalRandom(转)
2012-01-20 09:08 4348今天早上看到一个关于java7中的ThreadLocalRan ... -
(转)追MM与23种设计模式
2011-11-16 14:13 9991、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德 ... -
(转)TOMCAT源码分析
2011-10-17 16:06 2136TOMCAT源码分析(启动框架 ... -
java写的四则运算器
2011-08-19 22:19 2723本打算做一个从RE到NFA的转换器,思路已经理清了,但是在动手 ... -
一种简单并且统一的处理异常的办法
2011-06-04 12:21 1026之前做的一个项目中,有一些对异常处理的封装,如果抛出的异常是项 ... -
MBeanServer中instantiate 和 invoke的区别
2011-06-02 11:52 1303JMX中有两种方式调用另一个MBean中的方法 先创建一个M ... -
JMX 的一个简单例子
2011-05-30 17:41 1063废话不多说,上代码: HelloWorldMBean接口 ... -
执行JAR文件的一些问题(转)
2011-03-25 13:41 1385大家都知道一个java应用项目可以打包成一个jar,当然你必须 ...
相关推荐
下面将详细讨论如何在Java中实现多层嵌套循环以及与之相关的参数转换和数据库配置。 首先,多层嵌套循环的基本概念是指在一个循环体内部嵌套另一个或多个循环,使得内层循环会根据外层循环的迭代次数多次执行。例如...
2. 方法:C#的方法签名和实现转换为Java的格式,包括访问修饰符、返回类型、参数列表等。 3. 属性:C#的属性在Java中可能需要转换为getter和setter方法。 4. 枚举:C#的枚举转换为Java的常量类或枚举类型。 5. 泛型...
### Java调用存储过程——传入集合参数:深入解析与实践 #### 核心知识点概览 在Java应用中,调用数据库存储过程时,往往需要处理复杂的参数传递,特别是当参数为集合类型时,这一过程变得更加具有挑战性。本文将...
"WSDL转JAVA类工具"是一个实用程序,它能够解析WSDL文件并生成对应的Java源代码。这个过程称为代码生成,使得开发人员不必手动编写这些复杂的接口和消息处理类,极大地提高了开发效率和代码的准确性。 首先,我们...
这通常涉及构建命令行参数,然后使用Java的Runtime或ProcessBuilder API来执行外部进程。转换完成后,返回新生成的AVI文件路径供`processFLV()`使用。 `processFLV()`方法则负责调用FFmpeg将文件转换为FLV。同样,...
2. "Demo Java to C# Converter.exe.config" - 这是应用程序的配置文件,可能包含了工具的一些设置和配置信息,如默认行为、连接参数等。用户或开发者可以通过修改此文件来调整工具的运行环境。 3. "Demo Java to C#...
在提供的文件列表中,`UrlTool.exe`可能是一个可执行文件,用于直接运行该URL转换工具,而`jre6`则意味着这个工具需要Java运行环境6版本来执行。这意味着用户在使用此工具前需要确保他们的系统安装了兼容的Java版本...
### JAVA获取FTP文件列表知识点详解 #### 一、概述 在现代软件开发中,FTP(File Transfer Protocol)是一种广泛使用的协议,用于在网络上进行文件传输。本文档将详细介绍一个基于Java的实用工具类`FtpClientUtil`...
2. 函数和方法转换:Java的方法会被转换为Delphi的函数或过程,包括参数列表和返回类型。 3. 注释保留:转换过程中,Java源代码中的注释通常会被保留在转换后的Delphi代码中,方便理解和修改。 4. 异常处理:Java的...
在Java编程中,集合框架是核心...通过结合Java 8的新特性(如流API)和反射机制,我们能够在不牺牲性能的前提下,优雅地解决实体类列表互转的问题。在实际项目中,这样的工具类可以大大简化代码逻辑,提升开发效率。
【Java参数类型的多态研究】 Java参数类型的多态性是面向对象编程中的一个重要特性,它允许程序员使用同一段代码处理不同类型的对象。在Java中,多态性主要体现在方法的覆盖(Overriding)和接口的实现...
1. 数据列表:每个元素代表一个数据点,可以是自定义对象,包含属性如值(value)、类别(category)等。 2. 类别字段名:用于标识数据中表示类别的字段。 3. 值字段名:用于标识数据中表示值的字段。 下面是一个...
创建一个方法,接受`DirectoryNode`作为参数,然后递归地将每个节点转化为JSON对象。 例如,使用`org.json`库: ```java import org.json.JSONArray; import org.json.JSONObject; public JSONObject ...
2. **PDFToImage类**:在提供的文件列表中,"PDFToImage.java"可能是实现PDF转JPG功能的源代码。这个类通常会包含方法来解析PDF文档,并将每个页面渲染为高质量的JPG图片。关键方法可能包括`convertPageToImage()`,...
java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 ...
在提供的文件列表中,"java调用ffmpeg转换视频错误 - ITeye问答.htm"可能是关于一个具体的错误案例或讨论。通常,这类问题可能涉及编码解码器不匹配、输入输出文件格式不支持、内存分配问题、命令语法错误等。通过...
2. 创建PDF文档:在Java代码中,创建一个PD4ML实例并设置PDF的基本参数,如页面大小、方向等。 ```java import com.pd4ml.PD4ML; import com.pd4ml.PDFDocument; PD4ML pd4ml = new PD4ML(); PDFDocument document ...
文件列表中的“java文本转语音实例”可能是一个包含主类和其他相关类的项目结构,其中包含了具体的实现逻辑。通过解压并运行这个实例,你可以亲身体验Java文本转语音的全过程,加深对相关技术的理解。 总之,Java...
Java可变参数列表,也称为不定参数,是Java语言中的一种特性,允许方法接收数量可变的参数。这种特性在编程时提供了极大的灵活性,尤其是在处理不确定数量输入的情况下。以下是关于Java可变参数列表的详细解释。 1....
这里的`reduce`方法接受两个参数:初始值(这里为空字符串`""`)和一个二元操作函数(`(a, b) -> a + "," + b`),它将每个元素与之前的累积结果合并,最终得到一个完整的字符串。 2. 使用`collect`和`Collectors....