一、概念扫盲
弄明白Xms、Xmx、Permsize、MaxPermsize这几个名词的设置,就不得不先弄明白Java程序运行过程中的使用的内存是何物?如果我们把服务器(或者个人开发计算机)的物理内存比作一个大圆圈,如图:

-
蓝色部分为Java虚拟机未使用的物理内存,一般JVM内存的最大值与当前操作系统有很大关系,32位操作系统处理器的话,JVM的限制最大只有4G,如果操作系统为64位处理器的话,则没有这个限制。
-
绿色部分为JVM使用内存中的非堆内存,有一种说法叫栈内存,存放基本类型数据存储,具有明确的生命周期,符合后进先出的原则,超出当前变量使用域后,进行销毁栈内存的使用,回收容量。还有一种说法,这部分包括两部分:静态存储区和栈存储两部分,静态存储策略主要存放具有定量周期的类对象变量。
-
黄色部分为堆内存,应用运行过程中,存储new的对象实例以及引用类型数据,默认初始化大小为物理内存的1/64,最大容量为物理内容的1/4,默认空余堆内存小于40%的时候,JVM就会增大堆内存的容量直到设置的-Xmx的最大限制,超出之后就会报内存溢出。
PS:
如果-Xmx 不指定或者指定偏小,应用可能会导致java.lang.OutOfMemory错误,此错误来
本文介绍了Java程序运行时的内存结构,重点讲解了堆栈内存参数Xms、Xmx、Permsize、MaxPermsize的含义与设置技巧。在开发环境中,建议设置较小的-Xms以节省资源;而在生产环境中,为保证稳定性,通常使-Xms和-Xmx保持一致。
订阅专栏 解锁全文
2万+

被折叠的 条评论
为什么被折叠?



