Java如何使用XMX和XMS内存?

时间:2013-12-18 15:35:22

标签: java tomcat memory

我有 Tomcat ,已配置XMS=XMX(4G)。

但是 - 如果我将XMS设置为1G,该怎么办?

据我所知 - JVM 将以提供的1G内存启动 Tomcat 。然后,如果应用程序需要更多 - JVM 将在一段时间内将其提升至4G。要提升它 - Java 必须运行一些操作(调整大小,重新定位内存中的页面?) - 这需要一些时间和CPU资源,对吗?

Tomcat 的应用程序不需要这么多内存后发生了什么? Java 会再次运行操作以减少已用内存吗?

感谢。

P.S。为什么我要问 - XMS=1GXMX=4G Apache Jmeter 给出的结果比{I} ThroughputAverage少得多开始 Tomcat XMXXMS都是4G。

2 个答案:

答案 0 :(得分:2)

是的,JVM必须分配更多内存并重新安排所有堆空间(Eden,from,to,old和PermGen)以适应新内存。如果您计划让您的webapp使用一定数量的堆空间,那么最好在性能方面预先分配整个堆。

一旦JVM完成,它将永远不会释放它从操作系统中获取的内存。因此,如果您需要4GiB堆并且JVM最终需要它,那么您的堆将保持在4GiB,直到JVM终止。

答案 1 :(得分:1)

将Xms和Xmx设置为相等的值时JVM不必调整堆大小并避免JVM花费的时间。 这将为您的情况提供更好的结果,因为使用Jmeter,您正在强调需要增加堆的服务器。一旦你使用Jmeter,你的Tomcat将在一些垃圾收集器活动之后减少堆,这会破坏未被攻击的对象。