一、虚拟机参数
- -XX:+PrintGC 每次触发GC的时候打印相关日志
- -XX:+UseSerialGC 串行回收
- -XX:+PrintGCDetails 更详细的GC日志
- -Xms 堆初始值
- -Xmx 堆最大可用值
- -Xmn 新生代堆最大可用值
- -XX:NewRatio 新生代与老年代关系,最好是3或者4
- -Xss规定了每个线程堆栈的大小。一般情况下256K是足够了。影响了此进程中并发线程数大小。
- -XX:SurvivorRatio 用来设置新生代中eden空间和from/to空间的比例. 含以
-XX:SurvivorRatio=eden/from=den/to
总结:在实际工作中,我们可以直接将初始的堆大小与最大堆大小相等,
这样的好处是可以减少程序运行时垃圾回收次数,从而提高效率。
1.1 堆内存空间的知识
官方说明附链接: 垃圾回收机制
-
初始堆大小
计算机上物理内存的1/64的较大值或合理的最小值。在Java SE 5.0之前,默认的初始堆大小是一个合理的最小值,随平台的不同而不同。您可以使用-Xms命令行选项覆盖此默认设置。 -
最大堆大小
小于物理内存的1/4或1GB。在Java SE 5.0之前,默认的最大堆大小为64MB。您可以使用-Xmx命令行选项覆盖此默认设置。
二、内存溢出
2.1 堆内存溢出
将jvm参数设置为10M,循环创建1M对象十次,抛出内存溢出异常。
解决办法很简单,把内存加大即可,但也不是随便加,要根据调优方法调。可参照JVM调优总结
2.2栈内存溢出
栈内存溢出的出现现象是:在方法中循环调用方法,会导致栈内存溢出。
最大深度是不确定的,不过可以通过设置JVM参数将深度提升。 -Xss?M 设置堆栈内存大小