java 启动内存参数

这两天跑demo,demo总是因为out of memeory而停掉。之前也知道设置参数这回事,一直在工作中没有遇到过,顶多是eclipse启动的时候按照网上现成的模板弄一下,没有系统的了解一下,今天正好借这个机会了解一下。

java jvm的heap分3段:

--------------------------------

        PermGen space      ------------------------> 存储class文件等需要永久存储的

--------------------------------  -Xmx| -Xms

        Older              -------------------------->  存储。 jvm gc 一个线程专门负责扫描Older区进行gc

-------------------------------- -Xmn

        Young           --------------------------->  新new的对象, jvm gc有一个线程在Heap不足时,遍历Heap,将Young 区升级为Older区

-------------------------------- heap begin

ms和mx在生产环境一般将这两个值设置成相同的值,为了减少系统在运行期间分配内存所花费的时间。

经验值mn一般为mx的1/3.

4种GC

1、第一种为单线程GC,也是默认的GC,该GC适用于单CPU机器。
2、第二种为Throughput GC,是多线程的GC,适用于多CPU,使用大量线程的程序。第二种GC与第一种GC相似,不同在于GC在收集Young区是多线程的,但在Old区和第一种一样,仍然采用单线程。-XX:+UseParallelGC参数启动该GC。
3、第三种为Concurrent Low Pause GC,类似于第一种,适用于多CPU,并要求缩短因GC造成程序停滞的时间。这种GC可以在Old区的回收同时,运行应用程序。-XX:+UseConcMarkSweepGC参数启动该GC。
4、第四种为Incremental Low Pause GC,适用于要求缩短因GC造成程序停滞的时间。这种GC可以在Young区回收的同时,回收一部分Old区对象。-Xincgc参数启动该GC。

PS:  设置参数的默认单位是k,如果使用m或者g,要指明。

java -Xms15g -Xms15g -Xmn5g  xxx

参考资料:http://developer.51cto.com/art/200906/127144.htm

猜你喜欢

转载自zzgthk.iteye.com/blog/2195915