开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 11 天,点击查看活动详情
设置堆空间的最大值时应该注意什么?
当我们设置堆空间内存最大值(-Xmx)的时候应该要注意些什么,在设置的时候需要考虑哪些因素?
我们在设置堆空间最大值的时候首先要了解自己的机器配置,我们需要根据系统的配置来确定,因为我们在设置堆空间最大值的是需要考虑要给JVM 其他区域比如栈、方法区等留下一定的内存空间,不要把整个内存空间全部占满。
一般情况下是推荐系统配置里面或者容器配置里面的可用内存中百分之七十 到 百分之八十 最好。
例如
比如我们现在有一台机器,它的物理内存配置是 8G ,那么我们应该设置最大的堆内存为多少比较合适?
就 Linux 系统而言,物理内存 8G 的话,系统运行会占用一部分大概在 500M 左右,所以我们可以使用的空间大概是在 7.5G 左右,那么按照以上这样的建议来说 7.5G * 0.8 = 6G ,通过这样计算的话我们可以配置当前的最大堆内存大小参数为 -Xmx6g。
当然还有特殊的情况,例如在 jvm 中线程开辟的比较多的话,这个时候就需要把堆空间设置小一点,需要把内存给虚拟机栈多留出一部分空间,如果加载的类特别多的话就需要给方法区的空间设置大一点。
于此同时还有一部分本地内存或者说是非堆的内存,或者说是堆外的内存,这一一块内存如果使用的比较多的话,那这个时候就需要把堆内存设置的更小一点了。
所以设置堆空间最大值应该需要考虑以下几点:
1、操作系统物理内存大小
2、栈、方法区这类预留足够大小
3、预留直接内存大小