java - 了解最大 JVM 堆大小 - 32 位与 64 位

标签 java jvm heap-memory

我有 read 32 位 Windows 上的最大堆大小约为 1.5GB,这是因为 JVM 需要连续内存。有人可以解释“连续内存”的概念以及为什么在 Windows 上最多只有 1.5GB 吗?

其次,64 位 Windows 上的最大堆大小是多少,为什么这与 32 位上可用的不同?

最佳答案

32位/64位部分与Java无关

事实证明,32 位系统中的内存位置由 32 位无符号整数引用。这允许多达 2^32 个可能的内存位置。由于每个位置存储 1 个字节,因此如果您愿意,您可以获得 2^32 个字节或 4 GB。

在 64 位系统上,有 2^64 个位置,即 16 艾字节。

现在,在 Windows 中,连续部分成为一个大问题,但这正是 Windows 的工作方式。这个想法是你的堆需要有一个完整的“不间断”范围。可悲的是,Windows 在中间的某个地方分配了一些内存。这基本上给你留下了大约一半的左侧或一半的右侧,大约 1.5-2GB 的 block 来分配你的堆。

查看 this question有关 32 位与 64 位的更多详细信息。

编辑:感谢 mrjoltcola 提供 exa 前缀!

关于java - 了解最大 JVM 堆大小 - 32 位与 64 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2457514/

相关文章:

java - 将 Jquery 事件附加到 JSF 数据表

exception - clojure 中错误/异常的完整堆栈跟踪

javascript - 方法链接会在堆栈中创建中间变量吗?

c - 为什么 malloc 总是返回 0x 的地址???????8

c - 除了使用 malloc 之外,如何访问堆内存?

java - 是否可以将有序收集器与并行流一起使用?

java - 在已有的包含大量数据的表上创建 MySQL 索引

java - 关于 CodeName One 和 Path Java Runtime 的问题

java - 如何在 JVM 中持久化变量

java - 如何将 Jython 文件导入 Groovy?