我有 Tomcat 配置了 XMS=XMX
(均为 4G)。
但是 - 如果我将 XMS
设置为 1G 会怎么样?
据我了解 - JVM 将使用提供的 1G 内存启动 Tomcat。然后,如果应用程序需要更多 - JVM 会在一段时间内将其增加到 4G。要提升它 - Java 必须运行一些操作(调整大小、在内存中重新分配页面?) - 这需要一些时间和 CPU 资源,对吗?
Tomcat的应用程序不需要那么多内存后发生了什么? Java 将再次运行操作以减少已用内存?
谢谢。
附言为什么我要问 - 使用 XMS=1G
和 XMX=4G
Apache Jmeter 给出的结果要少得多(吞吐量
和 Average
),这比我使用 XMX
和 XMS
都是 4G 启动 Tomcat 时要好。
最佳答案
是的,JVM 必须分配更多内存并重新安排所有堆空间(Eden、from、to、old 和 PermGen)以适应新内存。如果您计划让您的 webapp 使用一定数量的堆空间,那么从性能方面来说,您最好预先分配整个堆空间。
JVM 永远不会释放它从操作系统中占用的内存。因此,如果您需要 4GiB 堆并且 JVM 最终占用了它,您的堆将保持在 4GiB 直到 JVM 终止。
关于java - Java 如何使用 XMX 和 XMS 内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20662221/