【问题标题】:Does JVM create its own swap?JVM 会创建自己的交换吗?
【发布时间】:2019-10-08 12:47:52
【问题描述】:

JVM 是创建自己的交换内存还是占用操作系统交换内存?如果操作系统没有任何交换内存怎么办,JVM 会只粘在 RAM 上吗?

【问题讨论】:

标签: java memory-management jvm swap


【解决方案1】:

JVM 的行为与内核上运行的任何其他进程一样。当 JVM 需要堆空间时,它会通过 malloc 库调用请求内存,然后使用系统调用(brk、sbrk 或 mmap)使用 OS 虚拟内存系统分配空间。这是否涉及分页交换与 JVM 无关,它只是要求空间并将细节留给 OS VM 子系统。

从性能的角度来看,在配置 JVM 时牢记这一点很重要。尽管您可以使堆大于机器的物理内存,但它会提供比堆小于物理内存更差的性能。这是堆超出物理内存时必须发生的分页活动的结果。

顺便说一句,Azul(我为之工作)有一个名为 Zing 的 JVM,它的处理方式略有不同。我们没有使用 Linux VM 子系统,而是拥有自己的内核级软件(称为 Zing System Tools 或 ZST)。这允许我们以特定于 JVM 的方式处理虚拟内存,而不是像 Linux 那样以通用方式处理虚拟内存。不使用的内存可以从 JVM 返回到 ZST,缓存行可以更优化,我们还可以允许 JVM 超过配置的堆大小以防止 OOM 错误。

【讨论】:

【解决方案2】:

虚拟内存是许多操作系统使用的一种技巧,用于所有实际目的,就像它们拥有的物理 RAM 比实际拥有的更多。这通常对普通程序是不可见的,操作系统会处理所有事情。

基于 HotSpot 的 Java 实现是普通程序,但可以变得非常大。因此,正确配置 JVM 非常重要,这样它就不会使用太多内存并导致交换。默认值通常是合理的。

所以,简而言之。 jvm 不关心交换——这纯粹是一个操作系统任务。

【讨论】:

    【解决方案3】:

    JVM 不会在磁盘中创建自己的交换内存,它像任何其他应用程序一样使用操作系统交换。如果操作系统没有配置 SWAP,它会粘在 RAM 上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 2013-08-04
      • 2021-07-28
      相关资源
      最近更新 更多