了解 Java 应用程序的堆外内存、不安全和 MaxDirectMemorySize

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

我一直对 JVM 如何控制堆外大小感到困惑,所以我会问以下问题来更好地理解它。

  1. 当人们使用Java

    Unsafe
    API在Java应用程序中分配堆外内存时,可以使用什么jvm选项来控制Unsafe可以分配的内存大小?是
    -XX:MaxDirectMemorySize
    吗?还有其他选项也可以用来控制大小吗?

  2. 从JVM内存布局来看,有一个区域叫做直接内存,那么

    MaxDirectMemorySize
    就是用来控制这个区域的大小的?并且
    Unsafe
    正在从该区域分配内存?

  3. 如果未设置

    -XX:MaxDirectMemorySize
    ,默认的堆外大小是多少。

  4. 如果

    Unsafe
    尝试分配超过JVM允许的内存(例如大于MaxDirectMemorySize),OOM还会发生吗?

java jvm
1个回答
0
投票
  • 是的 -XX:MaxDirectMemorySize 是控制可以分配的最大不安全内存的选项。

  • 从 -XX:MaxDirectMemorySize 指定的区域创建不安全内存。这就是所谓的直接内存区域

  • -XX:MaxDirectMemorySize的默认值为0。

  • 如果 Unsafe 尝试分配超过 JVM 允许的内存,就会发生 OOM

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