JVM配置 及说明
以32位机器为例,示例 JVM配置一般如下:
JAVA_OPTS="-server -Xms1535m -Xmx1535m -XX:NewSize=320m -XX:MaxNewSize=30m -XX:PermSize=9m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true"
上面参数代表的含义是:
?????? -Xms 初始Heap大小
-Xmx java heap最大值
-XX:NewSize 新生代预估上限的默认值 (JVM在启动时会申请-Xmx指定值大小的空间,但其中绝大部分空间不会被立即分配,它们会一直保留着,直到运行过程中,JVM发现实际占用接近已分配上限值时,才从virtual中再分配掉一部分内存,这里的已分配上限值,可以叫做预估上限值)
????? -XX:MaxNewSize? 新生代占heap的最大值
???? -XX:PermSize??? perf区的初始大小;
???? -XX:MaxPermSize? perm区占整个heap的最大值
???? -Djava.net.preferIPv4Stack=true????? 关掉jvm的ipv6功能(Due to a bug in the JDK on Linux, a socket cannot be bound to an IPv6 address)
?? 更多参数值请参考 File:Java 6 JVM参数选项大全(中文版).pdf????
??????? JAVA 内存分为三个区:young,old,perm。 Young区保存刚实例化的对象,Young区满了后GC会将该对象移到Old区,Perm区用于存放静态文件,如java类、方法等。
??????? 而我们平时所说的堆内存则只包括:young和old区。
??????? JVM有2个GC线程。第一个线程负责回收Heap的Young区。第二个线程在Heap不足时,遍历 Heap,将Young 区升级为Older区。Older区的大小等于-Xmx减去-Xmn,不能将-Xms的值设的过大,因为第二个线程被迫运行会降低JVM的性能。 一般而言,Server端JVM最好将-Xms和-Xmx设 为相同值。为了优化GC,最好让-Xmn值 约等于-Xmx的1/3;一个GUI程序最好是每10到20秒间运行一次GC, 每次在半秒之内完成。
?