【问题标题】:How Much Memory Can I Allocate?我可以分配多少内存?
【发布时间】:2014-03-02 06:10:40
【问题描述】:

如果我的机器上有 16 GB 的 RAM,我可以为正在执行的 java 命令行程序分配多少内存?我假设java -Xmx 16g... 会使我的系统崩溃?

编辑:
根据 cmets,我尝试了java -Xmx16g...,但它并没有使我的机器崩溃。程序仍然内存不足。我试过java -Xmx32g...,它确实让我的机器崩溃了。

从下面的 cmets(这真的很有启发性),我想我只需要继续玩弄分配。

【问题讨论】:

  • 你尝试的时候发生了什么?
  • 试试看。操作系统提供swap space,只要不是同时需要所有内存(页面可以“换出”),可用的虚拟内存总量就大于存在的物理内存量。
  • @RC:为什么不呢?你还认为 640kB 就够了吗?
  • @RC。 - 我知道这有点矫枉过正。但我做大量数据处理,并不总是可以访问我学校的服务器。编辑:我存了一年多的钱,由于苹果一直在推迟 2013 MBP 的发布日期,所以我一直在存更多的钱...... :-)
  • @njzk2 嘿,我曾经用 56KB 的 RAM 编写过 Apple II+!我也曾经步行五英里去学校,双向上山......

标签: java memory ram


【解决方案1】:

虚拟机的堆内存大小由选项-Xms控制 和 - Xmx

第一个指定初始堆大小和第二个最大大小。

分配是在 JVM 本身 内完成的,而不是在 OS 上完成的。当需要更多内存时,JVM 会分配一块内存,直到达到 Xmx。

如果您需要更多,则会引发 OutOfMemoryError。

XmsXmx 通常使用相同的值, 导致 VM 仅在执行开始时在操作系统中分配内存, 不依赖于操作系统特定的行为


在您的情况下,由于您将 32g 设置为 Xmx 并且系统崩溃了,因此您似乎没有此内存(交换 + 内存 ram)

如果您手动更改系统的虚拟内存大小,配置将起作用。

【讨论】:

    【解决方案2】:

    您的操作系统无法分配超过 16GB 的空间,因此您的系统会崩溃。除了另一个答案中说明的 XMX 和 XMS 之外,还有一个 -XX:+AggressiveHeap 选项,它检查机器资源(内存大小和处理器数量)并尝试将各种参数设置为最佳的长期运行内存分配密集型作业

    【讨论】:

      猜你喜欢
      • 2020-03-12
      • 2011-07-27
      • 1970-01-01
      • 2015-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多