Java虚拟机内存配置与参数说明

JVM内存分为堆区和非堆区
堆区:-Xms 、-Xmx、-XX:newSize、-XX:MaxnewSize、-Xmn;
非堆区:-XX:PermSize、-XX:MaxPermSize

堆区

配置堆区:-Xms 、-Xmx、-XX:newSize、-XX:MaxnewSize、-Xmn;
-Xms :表示java虚拟机堆区内存初始内存分配的大小,通常为操作系统可用内存的1/64大小即可。

-Xmx: 表示java虚拟机堆区内存可被分配的最大上限,通常为操作系统可用内存的1/4大小。在开发过 程中,通常会将 -Xms 与 -Xmx两个参数的配置相同的值,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源。(当初始堆占满后,会尝试进行GC,如果GC之后还不能得到足够的内存,那么就会扩展堆,如果-Xmx设置的太小,扩展堆就会失败导致OutOfMemoryError)
一般来讲对于堆区的内存分配只需要对上述两个参数进行合理配置即可,但是如果想要进行更加精细的分配还可以对堆区内存进一步的细化,那就要用到下面的三个参数了-XX:newSize、-XX:MaxnewSize、-
Xmn。当然这源于对堆区的进一步细化分:新生代、中生代、老生代。java中每新new一个对象所占用的内存空间就是新生代的空间,当java垃圾回收机制对堆区进行资源回收后,那些新生代中没有被回收的资源将被转移到中生代,中生代的被转移到老生代。而接下来要讲述的三个参数是用来控制新生代内存大小的。

-XX:newSize:表示新生代初始内存的大小,应该小于 -Xms的值;
-XX:MaxnewSize:表示新生代可被分配的内存的最大上限;当然这个值应该小于 -Xmx的值;
-Xmn:至于这个参数则是对 -XX:newSize、-XX:MaxnewSize两个参数的同时配置,也就是说如果通过-
Xmn来配置新生代的内存大小,那么-XX:newSize = -XX:MaxnewSize = -Xmn,虽然会很方便,但需要注意的是这个参数是在JDK1.4版本以后才使用的。

1)-Xms,ms看做的memory size的缩写,就是初始堆大小

2)-Xmx , maximum memory size,x代表最大,所以就最大堆内存

3)-Xss, ss就是stack size的缩写,所以是用来代表线程栈的大小

4)-Xmn,n代表是new generation(新生代),所以mn就是用来指定新生代的堆内存空间大小

下面两个在JDK8中被metaspace元空间取代是内存中的空间,理论上不可能溢出
5)-XX:PermSize 设置持久区的大小,在jdk 8中已经被metaspace取代

  1. -XX:MaxPermSize 设置持久区最大值,在jdk 8中已经被metaspace取代

非堆区

配置非堆区:-XX:PermSize、-XX:MaxPermSize
-XX:PermSize:表示非堆区初始内存分配大小,其缩写为permanent size(持久化内存)
-XX:MaxPermSize:表示对非堆区分配的内存的最大上限。
这里面非常要注意的一点是:在配置之前一定要慎重的考虑一下自身软件所需要的非堆区内存大小,因为此处内存是不会被java垃圾回收机制进行处理的地方。并且更加要注意的是最大堆内存与最大非堆内存的和绝对不能够超出操作系统的可用内存

配置实例

JAVA_OPTS="-server -Xms4096m -Xmx5096m -XX:MaxNewSize=128m -XX:PermSize=256M -XX:MaxPermSize=512m"

你可能感兴趣的:(JVM)