Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么xmx和top之间存在内存使用差异?_Java_Memory_Jvm - Fatal编程技术网

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

Java 为什么xmx和top之间存在内存使用差异?,java,memory,jvm,Java,Memory,Jvm,我将jvm的xmx设置为4g,但运行一段时间后,当我使用top查看内存时,它显示了使用12g内存的进程 那么xmx实际上是什么意思呢?如果我想将jvm内存限制在4G,我应该怎么做 命令行:-server-Xms4g-Xmx4g 还有一个相关问题:) 如果gc发生,JVM会不可避免地释放年轻一代中不再使用的对象空间吗?或者他们中的一些人被留到下一个gc 感谢您,JVM的-Xmx选项指定了Java的最大大小 垃圾收集堆。它不限制JVM使用的内存大小。ps或top报告的流程大小将 包括该内存,以及进程

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

那么xmx实际上是什么意思呢?如果我想将jvm内存限制在4G,我应该怎么做

命令行:-server-Xms4g-Xmx4g

还有一个相关问题:)

如果gc发生,JVM会不可避免地释放年轻一代中不再使用的对象空间吗?或者他们中的一些人被留到下一个gc


感谢您,JVM的-Xmx选项指定了Java的最大大小 垃圾收集堆。它不限制JVM使用的内存大小。ps或top报告的流程大小将 包括该内存,以及进程使用的任何其他内存。以下 是不属于垃圾收集堆的事物的示例 但它们是过程所需内存的一部分:

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

如何“将jvm的xmx设置为4g”?从命令行?您可以显示您正在使用的确切命令行吗?您可以尝试使用pmap$pid并查看其用法吗?您可以使用JConsole检查实际堆大小。还要检查JVM是否拾取了您的设置,您正在查看RSIZE还是VSIZE?也就是说,你确定你没有考虑虚拟内存的使用情况吗?+1我会添加直接字节缓冲区和内存映射文件,这些文件可以很容易地以GB(甚至100 GB)的形式用于某些程序。