赞
踩
-X
是 jvm 的运行参数,ms
是 memory start
的缩写-Xms
:设置堆空间(年轻代+老年代)的初始内存大小,即:堆最小空间
具体语法以及值得设置原则,咱看官网怎么说:
-XX:InitalHeapSize
-XX:InitalHeapSize
选项也可以用来设置初始堆大小。如果它出现在命令行中的-Xms之后,那么初始堆大小将被设置为-XX:InitalHeapSize指定的值。
-Xmx
:设置堆空间(年轻代+老年代)的最大内存大小,即:堆最大空间
下面的例子展示了如何使用不同的单位将最大允许分配的内存大小设置为80 MB:
-Xmx83886080
-Xmx81920k
-Xmx80m
-Xmx选项等价于-XX:MaxHeapSize
。
- xx: MaxHeapSize
-Xmn 或者 -XX:NewSize
:年轻代堆的初始大小设置-Xmnsize
-Xmn256m
-Xmn262144k
-Xmn268435456
-XX:NewSize=size
-XX:MaxNewSize=size
设置年轻代(托儿所)的堆的最大大小(以字节为单位)。默认值是按照人体工程学设置的(The default value is set ergonomically
)。
jsp
jstat -gc pid
初始堆大小为物理内存的1/64,最高为1gb,
最大堆大小为物理内存的1/4,最多为1gb
一般情况下,我们是将 -Xms 与 -Xmx 两个参数配置相同的值,为什么设置相同的值呢?
如果初始堆内存和最大堆内存设置的值不一样,则会出现频繁扩容堆空间的情况(假如堆空间的使用超过初始值小于最大值),这样GC的也就很频繁,频繁的扩容和释放会给系统带来很大的压力,所以一般情况下设置成一样大,避免GC的次数(GC很耗费用户线程的占用),提高程序性能。
不妨来看看官方咋说:
也就是说,目的是为了能够在Java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小,从而提高性能。
-Xms100m -Xmx100m
jstat -gc pid
查看某一进程的内存使用情况2.1.2
的时候你就明白了,请继续,往下看自会有答案!在介绍新生代和老年代之前,我们根据《深入理解Java虚拟机》先来了解一下分代收集理论。
当前商业虚拟机的垃圾收集器,大多数都遵循了“分代收集”
(GenerationalCollection)的理论进行设计,分代收集名为理论,实质是一套符合大多数程序运行实际情况的经验法则,它建立在两个分代假说之上:
1)弱分代假说(Weak Generational Hypothesis):绝大多数对象都是朝生夕灭的。
2)强分代假说(Strong Generational Hypothesis):熬过越多次垃圾收集过程的对象就越难以消亡。
这两个分代假说共同奠定了多款常用的垃圾收集器的一致的设计原则:收集器应该将Java堆划分出不同的区域,然后将回收对象依据其年龄(年龄即对象熬过垃圾收集过程的次数)分配到不同的区域之中存储
。显而易见,如果一个区域中大多数对象都是朝生夕灭,难以熬过垃圾收集过程的话,那么把它们集中放在一起,每次回收时只关注如何保留少量存活而不是去标记那些大量将要被回收的对象,就能以较低代价回收到大量的空间;如果剩下的都是难以消亡的对象,那把它们集中放在一块,虚拟机便可以使用较低的频率来回收这个区域(好比老年代
),这就同时兼顾了垃圾收集的时间开销和内存的空间有效利用。
所以,设计者一般至少会把Java堆划分为新生代(Young Generation)和老年代(Old Generation)两个区域
。顾名思义,在新生代中,每次垃圾收集时都发现有大批对象死去,而每次回收后存活的少量对象,将会逐步晋升到老年代中存放。
“Minor GC”、“Major GC”、“Full GC”
这样的回收类型的划分;也才能够针对不同的区域安排与里面存储对象存亡特征相匹配的垃圾收集算法——因而发展出了“标记-复制算法”“标记-清除算法”“标记-整理算法”等针对性的垃圾收集算法。标记-复制算法
,再坚持坚持,曙光就在眼前了分配担保(Handle Promotion)
。4096/1024 = 4M
;100M - 4M(其中一个Survivor区的) = 96M
-XX:+PrintGCDetails
这个收集器日志参数。jstat -gc pid
命名,我们已经看出优先分配的是伊甸园区-XX:+PrintGCDetails
这个参数:Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。