我已经在我的 Windows 上安装了 6GB 内存和 5GB 内存可用空间,当我运行一个指定 Java 堆空间的 Java 程序时 -Xmx2048m 它工作正常。我的问题是,如果我的 Linux 机器上有这个怎么办
猫 /proc/meminfo
MemTotal: 10.130464 kB (10.1gb)
MemFree : 248.736 kB (248mb)
如果我用这个内存在 Linux 中运行带有 -Xmx2048m 的 Java 程序会发生什么?
我已经在我的 Windows 上安装了 6GB 内存和 5GB 内存可用空间,当我运行一个指定 Java 堆空间的 Java 程序时 -Xmx2048m 它工作正常。我的问题是,如果我的 Linux 机器上有这个怎么办
猫 /proc/meminfo
MemTotal: 10.130464 kB (10.1gb)
MemFree : 248.736 kB (248mb)
如果我用这个内存在 Linux 中运行带有 -Xmx2048m 的 Java 程序会发生什么?
Java 将允许堆增长到 Xmx 值,但它不一定开始或需要使用那么多。Xms 指定最小堆大小,即 Java 在开始时将分配多少堆内存。Java 将为 Perm Gen 分配额外的内存。任何程序,不仅仅是 Java,如果在没有可用内存的情况下需要更多内存,就会开始失败。当到达 Xmx 或机器上没有可用内存时,Java 尤其会抛出 OutOfMemoryError。
MemFree 是剩余的物理内存量,但这不是可用内存的总量。当物理内存已满时,操作系统将使用交换空间(SwapTotal 和 SwapFree)。交换空间通常在硬盘上,因此非常慢。Linux 会尝试将最常用的内存块保留在物理内存中以保持性能,但通常会有一些减速。考虑到剩余的可用物理空间相对较少,Linux 机器可能已经在使用一些交换空间。结合 MemFree 和 SwapFree 以获得总可用内存。
编辑:总物理量为 1.8GB 加上免费交换,您将能够启动 Java,因为它最初使用 Xms(最小堆)加上 PermGen 内存,在 10GB 物理内存上默认为 220MB(1/64 物理内存加上 64MB PermGen) . 当您的程序运行时,它可以使用剩余的可用系统内存,但前提是您的程序确实需要它。如果这个程序不是资源密集型的,它可能会停留在低端。通常你应该设置 Xmx 以便它不会使用你所有的内存。如果您的内存使用率很高,您可能只想关闭一些其他程序。