【问题标题】:Max Heap memory single process allowed to use for a given ram size?最大堆内存单个进程允许使用给定的内存大小?
【发布时间】:2012-05-04 21:05:01
【问题描述】:

堆是 RAM 的一部分。但是仍然有一个限制,我们不能定义超出 RAM 的某个百分比的堆大小。例如:- 我有 32 位 winodws xp OS 和 4 GB 内存。但我不能声明堆大小超过 1600 MB。 我的问题是为什么我们不能将堆大小声明为某个较大的值,比如 3GB 低于我的 4GB RAM(因为在 32 位中最多可以使用 4GB 的 RAM)?这适用于单个进程。

我的意思是我可以启动两个 tomcat 或任何其他 java 进程 为每个进程分配 1600MB 堆大小,但我无法为单个进程分配 3200MB。这背后的原因是什么?

【问题讨论】:

  • 除了 JVM,还有其他的栈持有者也可以使用 RAM。

标签: java jvm heap-memory


【解决方案1】:

如果不是 64 位,则无法分配 4GB。

【讨论】:

    【解决方案2】:

    32 位 Windows 仅允许 2GB 的地址空间用于单个进程(未启用特殊扩展)。操作系统为自己保留另外 2GB。然后在该堆之上并不是 JVM 需要的所有内存。有permgen空间,还有JVM本身的代码使用的内存。

    【讨论】:

    • 爱。那是正确的。但基本上我想知道什么时候我们可以启动两个并行进程,每个进程都有 1.5GB 堆,为什么我们不能用 3GB 堆启动单个进程
    • 这是操作系统的限制。微软就是这样构建的!它与 Java 无关。
    • 如果您在 Solaris 上的 32 位 JVM 上运行,则最多可以访问 3 GB。
    • @M Sach,您会发现其他 32 位应用程序也有同样的问题。将一个非常大的文件加载到 Excel 中,它的最大容量约为 1.5 GB。
    • @彼得。您的意思是 3 GB 用于 solaris 上的单个进程对吗?
    猜你喜欢
    • 2015-11-30
    • 1970-01-01
    • 2012-04-29
    • 2017-01-05
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    相关资源
    最近更新 更多