我正在开发一个在 Tomcat 的 1GB 内存服务器上运行的 Java Webapp。
最近我们注意到该应用程序占用了该服务器上的大部分内存 - 大约 83%。
我已经在我的个人机器上使用 VisualVM 对应用程序进行了概要分析,该机器具有更多的 RAM。
VisualVM 显示大约 400MB 已用堆空间,以及高达 1.4GB 的已分配堆空间。
设置 -Xmx512m 允许我降低分配的堆空间,而不会对站点性能产生任何重大影响。
几个问题:
- 这或多或少正常吗?为什么会这样?
- 有什么办法可以减少内存消耗?如果应用程序确实最终需要更多内存,则使用 -Xmx 限制占用的内存量可能会成为问题。
- 如果操作系统需要另一个说 100mb 用于另一个进程,java 会释放这个内存供操作系统使用,因为它没有使用堆并且只分配堆,或者操作系统会运行到内存问题吗?