我有Tomcat,配置了XMS=XMX (两者都是4G)。
但是-如果我将XMS设置为1G呢?
据我所知,JVM将使用提供的1G内存启动Tomcat。然后,如果应用程序需要更多- JVM将在某一段时间内提高到4G。要想实现它-- Java必须运行一些操作(调整大小,在内存中重新定位页面?)--这需要一些时间和CPU资源,对吗?
在Tomcat的应用程序不需要这么多内存之后发生了什么?Java将再次运行动作以减少使用的内存?
谢谢。
P.S.为什么我要问-使用XMS=1G和XMX=4G Apache Jmeter给出的结果要比使用XMX和XMS的4G启动Tomcat的结果少得多(Throughput和Average)。
发布于 2013-12-18 21:55:25
是的,JVM必须分配更多的内存并重新安排所有堆空间(Eden、from、to、old和PermGen)以适应新内存。如果您计划让您的the应用程序使用一定数量的堆空间,那么从性能上看,您最好预先分配整个堆。
JVM将永远不会释放它从操作系统获得的内存,一旦这样做了。因此,如果您需要4GiB堆,并且JVM最终接受它,那么您的堆将停留在4GiB,直到JVM终止为止。
发布于 2013-12-18 16:52:59
当将Xms和Xmx设置为相等值时,JVM将不必调整堆的大小,并避免JVM在这方面花费的时间。在您的情况下,这确实会带来更好的结果,因为使用Jmeter,您将强调需要增加堆的服务器。在使用Jmeter完成之后,Tomcat将在一些垃圾收集器活动之后减少堆,这些活动将销毁未加载的对象。
https://stackoverflow.com/questions/20662221
复制相似问题