1

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

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

4

2 回答 2

1

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

于 2012-04-24T08:32:09.247 回答
0

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

于 2012-04-24T08:32:14.910 回答