斑竹网络专注为中小企业客户提供以管理服务为核心的IT全方位服务 https://www.sysadm.cn
分类: 系统运维
2013-11-22 13:37:28
jdk参数
(整理时间:2011-07-08)
一、 JVM变量规范
1、 以-X开头的选项是非标准的选项(不保证在所有VM上可以得到支持),而且可能在后续版本得到修改;
2、 以-XX形式的选项是非稳定的选项JDK官方不推荐使用;
3、 布尔型的选项以-XX:+<选项>的形式打开,而以-XX:-关闭;
4、 数字型的选项是用-XX:的形式来设置,数字可以包括m或M表示兆字节大小;
5、 字符串型的选项是以-XX:形式设置,这通常是用来指定一个文件,一个路径或者一个命令列表;
注:
以上内容来自官网:
二、 JVM非标准选项
a) -Xint 表示仅运行在翻译模式下。禁止编译本地代码,所有的代码都是通过翻译执行的;
b) –Xbatch:禁止后台编译。
c) –Xdebug:以支持JVMDI形式启动;
d) –Xbootclasspath:指定一个以逗号分隔的目录列表,用指示启动时搜索JAR 和ZIP包的路径;
e) –Xbootclasspath/a:指定一个以逗号分隔的目录列表,用以指示添加默认启动class路径的JAR和ZIP包的路径;
f) –Xmsn:指定一个初始分配的内存池大小,这个值必须是比1M大1024的倍数的数据,可以在数字后面添加k或K,m或M表示单位。这个选项的默认值是2m
g) –Xmx:指定分配的内存池最大值的大小,这个值必须是比2MB大1024的倍数的数据。可以在数字后面添加k或K,m或M表示单位。这个选项的默认值是64MB;在linux平台上,这个值的上限值只能设置成大约2G减去系统已经使用的值(注:这个大概是指在32位机上,操作系统只能寻址的范围。因此,如果使用PAE内核,则应该没有这个限制)
h) –Xrs:通过JVM来减少操作系统的信号的使用。其主要作用是在非正常关闭时,让用户能够处理退出程序;
i) Xmn:年青代的堆大小;
注:
以上来自java的man 页,这里仅节选
实践证明,像使用Resin这种服务器的Java应用,将Xms 和 Xmx设置成相同的值,可能比较好;
要获得较好的垃圾回收效率,Xmn值应该设置得要比Xmx值小
三、 关于垃圾回收(Garbage Collection : GC)
a) 实质上系统运行两个GC线程,其中一个是轻态的针对年青代(Eden 或者叫 Young)的堆(heap)进行回收;
b) 另一个是完整的GC线程,当没有足够的堆内存时候,它扫描整个堆并将年青代提升为年老代;
c) 如果内存分配不合理或者泄露,最终会导致Full GC频繁的运行。因为这个进程会停止所有服务,所以它将导致服务器对外停止响应;
d) 年青代的堆(Eden heap)的值是通过Xmn来指定的,而Xmx-Xmn就是年老代堆的值。通常不应将Xmn的值指定很大,因为它将让GC花很长的时间进行扫描;
注:
以上内容来自
四、 关于线程的堆大小(Stack size)
1、 每个线程都会在虚拟机(VM)中获取一个堆(stack)。而堆的大小会限制可以建立线程的数量,分配给每个线程的堆的大小超过其需要,将会导致内存溢出错误;
2、 用-Xss来设置每个线程堆的大小,如果设置的堆太小,最终也会抛出异常;
3、 有人说,对于Linux操作系统,修改堆的大小,需要在操作系统的层面进行设置。需要调用ulimit –s 命令,可以将这个命令放在/etc/profiles文件里,随系统启动进调用;