【问题标题】:How much memory can an application use in 32bit Linux machine?一个应用程序在 32 位 Linux 机器上可以使用多少内存?
【发布时间】:2012-10-22 08:58:00
【问题描述】:

我是 Linux 新手,对内存限制有疑问。

据我所知,在 Windows 中,您只能在 32 位版本的操作系统中使用 2.8 GB,但 Linux 呢 - 它也是 4 GB 还是更少?

我对在 RHEL5 中运行的 Java 应用程序特别感兴趣。 但是,如果您对其他技术有答案 - 那就太棒了。

【问题讨论】:

  • 在 32 位 Windows 中,堆大小的限制接近 1.2 到 1.5 GB,具体取决于已加载的共享库的数量。

标签: java linux memory operating-system ram


【解决方案1】:

RHEL5 32 位分别为用户进程和内核提供 3G/1G 拆分。

这意味着单个进程最多只能访问 3G 的地址空间。系统本身可以拥有超过 4G 的 RAM,如果您使用的是 PAE 内核,所有这些都将可供内核使用。并且内核将能够在不同的用户进程之间正确分配内存。

【讨论】:

    【解决方案2】:

    最多可能是 3Gbytes(但一些奇怪的内核配置选项可能会将其提高到 3.3Gbytes)

    您可以使用setrlimit(2) 系统调用降低可用内存限制(可能通过ulimit bash 内置)

    如果你有一个内存超过 4GB 的大熨斗,安装 64 位发行版应该是有意义的。

    您也许还可以考虑compiling your Java application ahead of time,例如gcj,但是那个编译器已经过时了,只支持一个旧的 Java 标准;而且我不确定你会赢得一些内存空间(可能是几兆字节,因为它的运行时间比你的 JVM 小得多)。

    【讨论】:

    • 是的! 64 更好 - 但是这个 32/64 的内存垃圾为我创造了一个令人讨厌的工作:'(
    • @BohdanVoloshyn 如果您使用纯 Java,则无需更改或重新编译代码即可在 32 位和 64 位之间切换。
    • @Basile,你真的认为gcj 在内存消耗方面会比大多数 JVM 中的 JIT 更好吗?
    • @Brian:我真的不知道,但我猜gcj 只会稍微好一点。您可以尝试使用它,但不要花费超过一两个小时。 (并且它可能无法编译您的代码,因为支持的标准并不是最新的 Java)。你肯定不会赢太多(你可能会输)。我想主要的区别可能是运行时的大小。
    • @Peter 不幸的是它不仅仅是 java
    猜你喜欢
    • 2023-03-29
    • 2014-01-31
    • 2011-08-06
    • 2011-08-27
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    相关资源
    最近更新 更多