【问题标题】:How restrict java virtual memory usage (not virtual machine memory usage)? [duplicate]如何限制java虚拟内存使用(不是虚拟机内存使用)? [复制]
【发布时间】:2014-12-16 14:33:37
【问题描述】:

我在 windows 7 x64 上有一些 java 应用程序并向它传递参数:

-Xms256m -Xmx256m

然后我运行 Process explorer 并查看 java 进程的列(值):私有字节 (414 620K)、工作集 (328 876K) 和虚拟大小 (1 890 352K)。很容易看出,在我指定最大和最小堆大小后,java.exe 进程以虚拟大小分配了更多内存。并且这对 Windows 上的 Page 文件大小的影响会越来越大。

那么如何限制java虚拟内存的使用呢?

P.S.如果你想重现这种情况,你可以下载cassandra,用-Xms256m -Xmx256m编辑bin\cassandra.bat,启动后你可以看到堆内存大小和虚拟之间的差异。然而 cassandra 只是一个 java 程序,所以关于如何运行 java 程序的问题,不是如何运行 cassandra。

【问题讨论】:

  • 将此视为一般 Windows 应用程序问题...其中应用程序为 java

标签: java windows memory memory-management cassandra


【解决方案1】:

Cassandra 旨在大量使用虚拟内存空间,而且这样做非常有效。这样做是为了避免操作系统上下文切换,并利用操作系统非常高效的磁盘到内存分页系统。即使分配的虚拟内存量超过物理内存,这种机制也可以非常安全地使用。 Cassandra 专为这种情况而设计,我建议您仅在遇到经过验证的问题时调整 Cassandra 配置文件。

-Xms-Xmx 仅配置 Java 堆大小。它不包括 perm gen、JVM 本身所需的内存或使用通过内存映射文件分配的堆外数据或使用 sun.misc.Unsafe

然而,虚拟内存的使用来自于 mmap() 的使用,即内存映射文件。在 Cassandra 的情况下,即 memory mapping of the stablesfrom Cassandra's FAQ

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 2018-11-12
    • 2013-10-21
    • 2015-12-16
    • 2016-07-24
    • 2012-05-14
    相关资源
    最近更新 更多