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

为什么JVM总分配内存大于-Xmx?

洪永长
2023-03-14

JVM选项:

-Xms20M -Xmx20M -Xmn10M -XX: 打印组件详细信息 -XX:幸存者比特=8

正如预期的那样,JVM将为JVM堆分配将近20MB的内存

但请参阅以下 GC 详细信息:

PSYoungGen总计9216K,已用4612k[0x 00000000 ff 6000000,0x 0000000010000000100000000]< br > Eden空间8192K,56%已用[0x 000000000 ff 600000,0x 0000000 FFA 812d 8,0x 000000000 ff 0000]< br >来自空间

年轻一代的大小与选项< code>-Xmn的预期一致。对于选项< code>-XX:SurvivorRatio=8,年轻一代中的伊甸园空间和幸存者空间的大小比是预期的。但是看起来JVM总共分配了将近40MB的内存,所以这很奇怪。为什么JVM总分配内存大于< code>-Xmx?

环境:

操作系统:64位win7

JDK:build 1.6.0_43-b01 64bit

共有1个答案

微生昌胤
2023-03-14

-Xmx设置热点对象堆的最大大小,即YoungGen(Eden Survivor空格)和OldGen的总和,约为20 MB。永久生成驻留在此堆外的单独内存区域中,该内存区域通过-XX:MaxPermSize选项进行控制。

 类似资料:
  • 我的问题是,谁分配和管理这些内存段?操作系统不知道java程序正在运行,并认为它是JVM的一部分,作为计算机上的常规程序运行,JIT编译、java堆栈的使用,这些操作需要运行时内存分配,我不明白的是JVM如何将其内存划分为这些内存段。这肯定不是由操作系统来完成的,这些内存段(例如java堆栈)必须是连续的才能工作,所以如果JVM程序只是使用malloc命令来接收堆内存的最大大小并将这些内存划分为多

  • 我有一个非常消耗内存的程序,想使用-Xmx2048m为java jvm分配更多的最大内存。但在启动时,我得到一个“无法为对象堆保留足够的空间”错误。 当尝试多个值并发现我的最大值是时,它就开始了。但我喜欢分配2GB。在使用-Xmx1560m启动java进程后,我有6GB的物理内存,Taskmanager显示3400MB可用。 有人知道我为什么不能分配2GB吗?

  • 我使用的计算机规格如下:OS-Windows7 professional Installed Memory(RAM):8Gb系统类型:64位操作系统JVM:Java version 8 update 91(jre1.8.0_91)64位版本 Java版本"1.8.0_91"Java(TM)SE运行时环境(内部版本1.8.0_91-b15)JavaHotSpot(TM)64位服务器VM(内部版本25

  • 主要内容:前言,1、是否依赖Java系统自身内存处理数据?,2、依赖Java系统自身内存有什么缺陷,3、优化为依赖OS Cache而不是JVM,4、老司机经验之谈:,5、正确的做法:前言 这篇文章,给大家聊一个生产环境的实践经验:线上系统部署的时候,JVM堆内存大小是越大越好吗? 先说明白一个前提,本文主要讨论的是Kafka和Elasticsearch两种分布式系统的线上部署情况,不是普通的Java应用系统。 1、是否依赖Java系统自身内存处理数据? 先说明一点,不管是我们自己开发的Java应

  • 嗨,我们使用Apache Ignite2.7(8个节点,每个120GB)并配置16GB堆和100GB数据区域(持久化)。使用本机内存跟踪,我们可以看到通常预期的堆、线程等类别与预期的一样,但“内部”(即离堆)是惊人的132GB。这是JVM需要运行的最重要的东西。对于JVM如此巨大的内存请求,系统正被驱动到内存不足的情况(OS内存不足)。 下面是我们正在看到的一个典型的本地内存摘要。注意巨大的内部分

  • 对此有什么建议吗?