繁体   English   中英

64位Java 1.7是否忽略最小堆大小标志?

[英]Does 64-bit java 1.7 ignore the minimum heap size flag?

java -Xms显然对运行过程中Java进程消耗的内存量没有影响。

从系统的角度来看,我有一个消耗约1Gb的应用程序。 我尝试设置-Xms2048m(和-Xmx4096m),但我发现内存消耗绝对没有变化。

热点文档声称堆大小受Xms值或默认值限制。

我能想到的唯一一件事是,该进程可能无法获取连续的内存块,因此它已获取了所有可能的内存,然后将在以后分配更多的内存,或者Windows不允许其拥有这么多的内存开始。 (64位Windows 7)

(我什么都不需要,这只是我注意到的东西)

Windows任务管理器的默认内存使用情况显示,您不是在进程虚拟内存空间中分配的内容。 该过程实际上已写入虚拟空间的数量,必须将其映射到真实内存。 如果在任务管理器中启用“提交大小”列,则该列将从进程的虚拟地址空间的角度显示实际使用的内容。 (大约Xms + permsize + VM和系统内容本身的大小。)

对于Java 1,请尝试使用-ms-mx

从Java2开始,您可以使用-Xms-Xmx

我的经验是, -ms和`-mx在Java2中也可以使用。 参见http://www.devx.com/tips/Tip/5578

JVM需要用于堆的连续内存区域。 这意味着它将在启动时将最大大小分配为虚拟内存。 这并不像听起来那样糟糕,因为操作系统仅在使用时为应用程序分配主内存(而不是在分配虚拟内存时)。

如果查看VisualVM之类的工具中使用的内存量,您会发现即使开销为150-500 MB,该大小也小于最小大小。 这是因为Java如果不使用最小大小,则不仅会使用最小大小。

取而代之的是最小大小,在该点以下,它仅进行较小的尝试来清理内存。 (您可能会看到它执行次要GC)在大多数情况下,这意味着应用程序将非常快速地使用最小大小。 但是,“ hello world”程序将不使用最小大小。

也许Windows不允许它有那么多的内存开始

如果JVM无法将最大大小分配为连续块,则它将无法启动。 (这是32位窗口上的常见问题,因此限制可能是1.5 GB或低至1.2 GB)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM