JVM按照其存储数据的内容将所需内存分配为堆区与非堆区两个部分:
所谓堆区即为通过new的方式创建的对象(类实例)所占用的内存空间;
非堆区即为代码、常量、外部访问(如文件访问流所占资源)等。
然而虽然java的垃圾回收机制虽然能够很好的解决内存浪费的问题,
但是这种机制也仅仅的是回收堆区的资源,而对于非堆区的资源就束手无策了,
针对这样的资源回收只能凭借开发人员自身的约束来解决。
-Xms
#指设定程序启动时占用内存大小。(堆区配置)
一般来说,启动时占用的内存大点程序会启动得快一点,但是也可能导致机器暂时变慢。
通常为操作系统可用内存的1/64大小即可,但仍需按照实际情况进行分配。
-Xmx
#指设定程序运行期间最大可以占用的内存大小。(堆区配置)
如果程序运行需要占用更多的内存,超出了这个设置的值,就会抛出OutOfMemory异常。
通常为操作系统可用内存的1/4大小。
##通常会将 -Xms 和 —Xmx两个参数的配置相同的值,
其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小,
从而提高性能。
##JVM中最大堆大小有三方面的限制:
(1)相关操作系统的数据模型(32-bit 还是 64-bit)限制;
(2)系统的可用虚拟内存限制;
(3)系统可用物理内存限制。
32位系统下,一般限制在1.5~2G,64位操作系统对内存无限制。
-XX:PermSize
#指非堆区初始化内存分配大小。(非堆区配置)
-XX:MaxPermSize
#指对非堆区分配内存的最大上限。(非堆区配置)
##在配置之前,一定要慎重的考虑一下软件所需的非堆区内存的大小,
因为此处内存是不会被java垃圾回收机制进行处理的地方。
并且更加要注意的是:最大堆内存与最大非堆内存的和绝对不能够超出操作系统的可用内存。
参考:
1、tomcat中关于-Xms -Xmx -XX:PermSize -XX:MaxPermSize的理解和区别 - CSDN博客
https://blog.csdn.net/hsj1213522415/article/details/56494973
2、JVM调优总结 -Xms -Xmx -Xmn -Xss - CSDN博客
https://blog.csdn.net/rickyit/article/details/53895060
3、tomcat的内存配置,关于-Xms -Xmx -XX:PermSize -XX:MaxPermSize的理解和区别 - 范远 - 博客园
https://www.cnblogs.com/fan-yuan/p/7238429.html