JVM 相关参数

参数名参数说明                                                    
-server 启用能够执行优化的编译器, 显著提高服务器的性能,但使用能够执行
优化的编译器时,服务器的预备时间将会较长。生产环境的服务器强烈推荐设置
此参数。
-Xss 单个线程堆栈大小值;JDK5.0 以后每个线程堆栈大小为1M,以前每个线程
堆栈大小为256K。在相同物理内存下,减小这个值能生成更多的线程。但是操
作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在
3000~5000 左右。
-XX:+UseParNewGC 可用来设置年轻代为并发收集【多CPU】,如果你的服务器
有多个CPU,你可以开启此参数;开启此参数,多个CPU 可并发进行垃圾回收,
可提高垃圾回收的速度。此参数和+UseParallelGC,-XX:ParallelGCThreads 搭
配使用。
+UseParallelGC 选择垃圾收集器为并行收集器。此配置仅对年轻代有效。即上
述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集。可提高系统的
吞吐量。
-XX:ParallelGCThreads 年轻代并行垃圾收集的前提下(对并发也有效果)的线
程数,增加并行度,即:同时多少个线程一起进行垃圾回收。此值最好配置与处
理器数目相等。
永久存储区相关参数:
参数名参数说明
-Xnoclassgc 每次永久存储区满了后一般GC 算法在做扩展分配内存前都会触发
一次FULL GC,除非设置了-Xnoclassgc.
-XX:PermSize 应用服务器启动时,永久存储区的初始内存大
-XX:MaxPermSize 应用运行中,永久存储区的极限值。为了不消耗扩大JVM 永久
存储区分配的开销,将此参数和-XX:PermSize 这个两个值设为相等。
堆空间相关参数
参数名参数说明
-Xms 启动应用时,JVM 堆空间的初始大小值。
-Xmx 应用运行中,JVM 堆空间的极限值。为了不消耗扩大JVM 堆控件分配的开
销,将此参数和-Xms 这个两个值设为相等,考虑到需要开线程,讲此值设置为
总内存的80%.
-Xmn 此参数硬性规定堆空间的新生代空间大小,推荐设为堆空间大小的1/4。
上面所列的JVM 参数关系到系统的性能,而其中-XX:PermSize,
-XX:MaxPermSize,-Xms,-Xmx 和-Xmn 这5 个参数更是直接关系到系统的性能,
系统是否会出现内存溢出。
始大小和极限大小;在生成环境中强烈推荐将这个两个值设置为相同的值,以避
免分配永久存储区的开销,具体的值可取系统“疲劳测试”获取到的永久存储区
的极限值;如果不进行设置-XX:MaxPermSize 默认值为64M,一般来说系统的类定
义文件大小都会超过这个默认值。
-Xms 和-Xmx 分别是服务器启动时,堆空间的初始大小和极限值。-Xms 的默认值
是物理内存的1/64 但小于1G,-Xmx 的默认值是物理内存的1/4 但小于1G.在生
产环境中这些默认值是肯定不能满足我们的需要的。也就是你的服务器有8g 的
内存,不对JVM 参数进行设置优化,应用服务器启动时还是按默认值来分配和约
束JVM 对内存资源的使用,不会充分的利用所有的内存资源。
到此我们就不难理解上文提到的“我的服务器有8g 内存,系统也就100M 左右,
居然出现内存溢出”这个“怪现象”了。在上文我曾提到“永久存储区溢出
(java.lang.OutOfMemoryError: Java Permanent Space)”和“JVM 堆空间溢
出(java.lang.OutOfMemoryError: Java heap space)”这两种溢出错误。现
在大家都知道答案了:“永久存储区溢出(java.lang.OutOfMemoryError: Java
Permanent Space)”乃是永久存储区设置太小,不能满足系统需要的大小,此
时只需要调整-XX:PermSize 和-XX:MaxPermSize 这两个参数即可。“JVM 堆空间
溢出(java.lang.OutOfMemoryError: Java heap space)”错误是JVM 堆空间
不足,此时只需要调整-Xms 和-Xmx 这两个参数即可。

posted @ 2019-06-04 16:57  圣子  阅读(171)  评论(0编辑  收藏  举报