这意味着“ JVM从操作系统请求的内存必须是连续的?”

问题描述 投票:0回答:1

[我在网络上看到很多人声称“ JVM启动时,JVM从操作系统请求连续的无碎片内存块”。我无法理解的是这与虚拟内存的概念如何相关。

OS可能会将任何进程的内存页面换出到磁盘,然后将它们重新加载到RAM中-它们很可能会被加载到不同的位置,因此该进程使用的物理内存将不再是连续的。

关于进程的虚拟内存-从进程的角度来看,它将始终是“连续的”,因为每个进程都有自己的地址空间。

因此,我想了解的是:

  • 表示必须将操作系统分配给JVM的内存连续真的是真的吗?
  • 如果是这样,考虑到操作系统,操作系统如何确保内存保持连续可能会换出到磁盘并换回RAM?
  • 如果陈述不正确,可能是OS为何的原因会拒绝该进程所要求的内存?记忆过量使用设置?
java memory-management operating-system jvm
1个回答
0
投票
  1. JVM为different purposes分配内存。当然,这不仅仅是一块内存。一些JVM结构需要占用一个连续的块,其他则不需要。

  2. 如果我们谈论HotSpot JVM中的Java堆-是的,它是virtual地址空间的连续范围。

  3. 连续虚拟内存不必由连续物理内存支持。 Page table负责将虚拟地址转换为物理地址,并且即使在交换等之后,也可以将连续的虚拟地址范围映射到碎片化的物理页面。

  4. 虽然在64位系统上为Java堆或其他JVM结构找到连续的虚拟地址范围通常不是问题,但在32位系统上可能是一个真正的问题。

  5. 您是正确的,如果进程的虚拟内存总大小超过阈值,则OS内存过量使用设置可能会导致mmapmprotect调用失败。

© www.soinside.com 2019 - 2024. All rights reserved.