繁体   English   中英

Java如何使用XMX和XMS内存?

[英]How Java uses XMX and XMS memory?

我有配置XMS=XMX (两者都是4G)的Tomcat

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

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

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

谢谢。

PS为什么我要问 - 使用XMS=1GXMX XMX=4G Apache Jmeter给出的结果远远少于( ThroughputAverage ),而不是我用XMXXMS同时启动Tomcat的 4G。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM