9 JVM内存参数调优
… java.lang.OutOfMemoryError <<no stack trace available>> java.lang.OutOfMemoryError <<no stack trace available>> Exception in thread "main" …
public class A { public static void main(String args[]) { for (int i =0 ;i < 100000;++i) { A a = new A(); } System.out.println("this is a GC test"); } }
public class A { public static void main(String args[]) { for (int i =0 ;i < 100000;++i) { A a = new A(); a = null; } System.out.println("this is a GC test"); } }
public class A { public static void main(String args[]) { for (int i =0 ;i < 100000;++i) { A a = new A(); a = null; } System.gc(); System.out.println("this is a GC test"); } }
JVM 堆内存 ( heap ) 设置选项
|
参数格式 | 说明 |
设置新对象生产堆内存(Setting the Newgeneration heap size)
|
-XX:NewSize |
通 过这个选项可以设置 java 新对象生产堆内存 。在通常情况下这个选项的数值为 1024的整 数倍并且大于1MB 。这个值的取值规则为,一般情况下这个值-XX:NewSize 是最大堆内存(maximum heap size) 的四分之一。增加这个选项值的大小是为了增大较大数量的短生命周期对象
增加Java新对 象生产堆内存相当于增加了处理器的数目 。并且可以并行地分配内存,但是请注意内存的垃圾回收却是不可以并行处理的
|
设置最大新对象生产堆内存(Setting the maximum New generation heap size)
|
-XX:MaxNewSize |
通过这个选项可以设置最大Java 新对象生产堆内存 。通常情况下这个选项的数值为1024 的 整数倍并且大于1MB
其功用与上面的设置新对象生产堆内存-XX:NewSize 相同
|
设置新对象生产堆内存的比例(Setting New heap size ratios)
|
-XX:SurvivorRatio |
新对象生产区域通 常情况下被分为3 个子区域:伊甸园,与两个残存对象空间, 这两个空间的大小是相同的 。通过用-XX:SurvivorRatio=X 选项配置伊甸园与残存对象空间(Eden/survivor) 的大小的比例。 你可以试着将这个值设置为8 ,然后监控、观察垃圾回收的工作情况
|
设置堆内存池的最小值(Setting minimum heap size)
|
-Xms |
通过这个选项可以要求系统为堆内存池分配内存空间的最小值 。通常情况下这个选项的数值为1024的整数倍并且大于1MB 。这个值的取值规则为,一般情况下这个值(-Xms) 与最大堆内存相同,以降低垃圾回收的频度
|
设置堆内存池的最大值 (Setting maximum heap size)
|
-Xmx |
通过这个选项可以要求系统为堆内存池分配内存空间的最大值 。通常情况下这个选项的数值为1024 的整数倍并且大于1MB。
一般情况下这个值
(-Xmx)与最小堆内存(minimum heap size -Xms) 相同,以降低垃圾回收的频度
|
取消垃圾回收 | -Xnoclassgc | 这个选项用来取消系统对特定类的垃圾回收。它可以防止当这个类的所有引用丢失之后,这个类仍被引用时不会再一次被重新装载,因此这个选项将增大系统堆内存的空间 |
设置栈内存的大小 | -Xss |
这个选项用来控制本地线程栈的大小 ,当这个选项被设置的较大(>2MB) 时将会在很大程度上降低系统的性能 。因此在设置这个值时应该格外小心,调整后要注意观察系统的性能,不断调整以期达到最优
|
public class A { public static void main(String args[]) { for (int i =0 ;i < 100000;++i) { A a = new A(); } } }