当前位置: 首页 > 知识库问答 >
问题:

为什么JVM占用的内存比-xms指定的少?

单于骁
2023-03-14

我的问题作为标题,通过搜索得到了一些知识:

>

  • Linux具有共享内存如何测量应用程序或进程的实际内存使用情况?

    JVM将保留在Xms中设置的内存量,对于堆内存,-Xms JVM是什么意思?

    下面是我在Ubuntu12.04(64bit)JDK 1.7.0_04上的测试运行。和顶部显示如下:

      PID USER      PR  NI  VIRT  RES       SHR S %CPU %MEM    TIME+  COMMAND
     4067 brian     20   0 5316m **262m** 7496 S    0  3.3   0:00.30 java -**Xms4096m** -Xmx4096m Test
     4066 brian     20   0 3182m **256m** 7496 S    0  3.3   0:00.30 java -**Xms2048m** -Xmx2048m Test
     4065 brian     20   0 2114m **252m** 7492 S    0  3.2   0:00.30 java -**Xms1024m** -Xmx1024m Test
     4064 brian     20   0 1314m  **76m** 7584 S    0  1.0   0:00.20 java -**Xms256m** -Xmx256m Test
     4063 brian     20   0 1180m  **51m** 7608 S    0  0.7   0:00.21 java -**Xms128m** -Xmx128m Test
    
  • 共有1个答案

    汪安宁
    2023-03-14

    您看到的是驻留内存--即所消耗的物理RAM。更多信息请参阅此处。

    然而,虚拟内存是应用程序消耗的内存,包括交换出去(到磁盘)的内存。您将看到虚拟内存和-xms设置之间有更密切的对应关系。

    有关更多信息,请参阅此ServerFault答案。

     类似资料:
    • 我有一个简单的java程序,它使用和参数运行。所以初始堆是512Mb,这意味着我的JVM必须请求我的OS在我启动程序时为它分配至少512Mb。如果打开jconsole,我会看到最大堆大小为524MB(JVM本身需要一些额外的内存),提交内存为524(保证Java VM可用的内存量)。但如果执行 然后我明白了 我很困惑。怎么会低于512MB呢?

    • 问题内容: 这最终会消耗我所有的可用内存,然后进程被杀死。我曾尝试将标签从更改为“较小”标签,但这并没有什么不同。 我在做什么错/如何处理这个大文件? 我可以轻松地将其切碎并以较小的块进行处理,但这比我想要的还要难看。 问题答案: 当遍历整个文件时,将构建一棵树,并且不会释放任何元素。这样做的好处是元素可以记住其父元素是谁,并且您可以形成引用祖先元素的XPath。缺点是它会消耗大量内存。 为了在解

    • 我们将和设置为1536m。现在,如果我理解正确的话,j-xmx表示堆的最大大小。 本系统采用4核15GB ram进程。 但是,当我检查正在运行的Java进程的RSS(使用top)时,我看到它使用的值比大,大约。 对于来说,有4个内核和15GB RAM的理想设置是什么(假设除了Java应用程序之外,系统中没有其他进程在运行)

    • 问题内容: 本着Java的精神:为什么存在MaxPermSize?,我想问一下为什么Sun JVM对其内存分配池的大小使用固定的上限。 默认值为物理RAM的1/4(有上限和下限);结果,如果您有一个内存消耗大的应用程序,则必须手动更改限制(参数- Xmx),否则您的应用程序将运行不佳,甚至可能因OutOfMemoryError崩溃而崩溃。 为什么这个固定限制甚至存在?为什么JVM不能像大多数操作系

    • 问题内容: 我有一小段代码每隔五分钟拍摄一次我的桌面的屏幕截图。但是,我对它占用的内存量有些困惑-通常它会爬升到200mb RAM,我敢肯定这是多余的…谁能告诉我a)减少内存占用空间的明智方法或b)它为什么涨 可言 ? 问题答案: 其他答案是正确的:Java将使用允许的尽可能多的内存,这时它将进行垃圾回收。要解决此问题,可以在JVM设置中指定较小的最大堆大小。您可以使用- Xmx设置来执行此操作。

    • 我正在寻找一种策略来调整我正在运行的应用程序的JVM参数。 该应用程序本身是一个网络应用程序,大多数时候不做太多事情,也不需要太多内存。假设300MB。时不时地,外部的一些东西会触发大量的繁重处理,偶尔需要更多内存。假设1400 MB。 我在JDK 15上运行,没有任何其他JVM参数在kubernetes集群中的pod上。 我想: 确保我的应用程序持续运行 确保我的应用程序从底层系统占用的内存不会