为什么xmx和top之间存在内存使用差异?

我将jvm的xmx设置为4 G,但是在运行一段时间后,当我使用top来查看内存时,它显示了使用12 G内存的进程。

那么xmx究竟意味着什么? 如果我想将jvm内存限制为4G,我该怎么办?

命令行:-server -Xms4g -Xmx4g

另一个相关的问题:)

如果gc发生了,那么年轻一代不再使用的对象的空间是否会被JVM不可避免地释放出来? 或者其中一些留给下一个gc?

谢谢

JVM的-Xmx选项指定maximum size of the Java garbage collected heapmaximum size of the Java garbage collected heap 。 它不限制JVM使用的内存大小。 ps或top报告的进程大小将包括该进程使用的任何其他内存。 以下是不属于垃圾收集堆的事物的示例,但它们是进程所需的内存的一部分:

  • 用于实现JVM的代码
  • 用于实现JVM的数据结构的C手动堆
  • 系统中所有线程的堆栈(app + JVM)
  • 缓存的Java字节码(用于库和应用程序)
  • JITed机器代码(用于库和应用程序)
  • 所有已加载类的静态变量