Mar*_*arc 13 java memory tomcat jvm
我观察到操作系统所说的内容与jVisualVM所说的内容之间的Tomcat RAM消耗不匹配.
从htop开始,Tomcat JVM拥有993 MB的驻留内存
从jVisualVM,Tomcat JVM正在使用
根据我的理解,操作系统内存消耗应该是堆大小+ PermGen大小〜= 522 MB.但这比我观察到的要少471 MB.
任何人都知道我在这里错过了什么?
PS:我知道我的最大堆远远高于使用的,但我认为如果JVM不使用它(即堆大小较低)应该没有效果.
谢谢!渣
根据我的理解,操作系统内存消耗应该是堆大小+ PermGen大小〜= 522 MB.但这比我观察到的要少471 MB.任何人都知道我在这里错过了什么?
如果我理解你所看到的问题是内存碎片和其他领域的JVM内存开销的组合.我们经常看到生产程序的内存使用量是我们从内存设置中看到的2倍.
内存碎片可能意味着虽然JVM认为操作系统已经为其提供了一定数量的字节,但由于内存子系统的优化,必须给出一定的额外字节数.
就JVM开销而言,标准内存配置中还包含许多其他存储区域.这是一个很好的讨论.报价:
以下是不属于垃圾收集堆的事物的示例,但它们是进程所需的内存的一部分:
- 用于实现JVM的代码
- 实现JVM的数据结构的C手动堆
- 系统中所有线程的堆栈(app + JVM)
- 缓存的Java字节码(用于库和应用程序)
- JITed机器代码(用于库和应用程序)
- 所有已加载类的静态变量