Windows 7 或 Linux 的 Java 内存

标签 java linux windows heap-memory heap-size

我在我的 Windows 上安装了 6GB 内存和 5GB 可用内存空间,当我运行一个指定 Java 堆空间 -Xmx2048m 的 Java 程序时,它工作正常。我的问题是,如果我的 Linux 机器上有这个怎么办

cat /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 物理内存(1/64 物理内存加上 64MB PermGen)上默认为 220MB .当您的程序运行时,它可以使用剩余的可用系统内存,但前提是您的程序确实需要它。如果这个程序不是资源密集型的,它可能会停留在低端。通常你应该设置 Xmx,这样它就不会占用你所有的内存。如果您的内存使用率很高,您可能只想关闭一些其他程序。

关于Windows 7 或 Linux 的 Java 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29785150/

相关文章:

java - Oracle Coherence 通读配置

java - 为什么我看不到用这个 ShadowRenderer 生成的阴影?

linux - 如何捕获键盘事件并将监视器用作 Linux 上的文本显示?

linux - 错误 libapache2-mod-php5 软件包 ubuntu

c# - 在具有 TLS 安全性的 .Net 中映射网络驱动器

java - 在 Eclipse 插件运行时询问用户 "object"

java - 从排行榜获取分数和玩家信息

php - 我可以将整个代码文件夹复制粘贴到 SVN 存储库中吗

java - 重新安装 Windows 后 Flutter 构建失败

c++ - Windows 上的字符串大小与 Linux 上的不同