堆是RAM的一部分。但仍有一个限制,我们无法定义堆大小超过一定百分比的RAM。例如: - 我有32位winodws xp操作系统和4 GB RAM。但我不能声明堆大小超过1600 MB。 我的问题在这里为什么我们不能将堆大小声明为某个大值说3GB哪个 低于我的4GB RAM(32位可以使用高达4GB的RAM)?这适用于单个流程。
我的意思是我可以启动两个tomcat或任何其他java进程 为每个进程分配1600MB的堆大小但是我不能为单个进程分配3200MB。这背后的原因是什么?
答案 0 :(得分:1)
32位窗口只允许2GB的地址空间到一个进程(没有启用特殊扩展。)操作系统为自己保留另外2GB。然后,最重要的是Heap并不是JVM需要的所有内存。有permgen空间,以及JVM自身代码使用的内存。
答案 1 :(得分:0)
如果不能分配64位4GB。