为什么jdk1.8要把方法区从JVM里移到直接内存?

为什么jdk1.8要把方法区从JVM里移到直接内存?

  • 原因一:
    因为直接内存,JVM将会在IO操作上具有更高的性能,因为它直接作用于本地系统的IO操作。而非直接内存,也就是堆内存中的数据,如果要作IO操作,会先复制到直接内存,再利用本地IO处理。

    从数据流的角度,非直接内存是下面这样的作用链:
    本地IO --> 直接内存 --> 非直接内存 --> 直接内存 --> 本地IO
    而直接内存是:本地IO --> 直接内存 --> 本地IO

  • 原因二:
    整个永久代有一个 JVM 本身设置固定大小上线,无法进行调整,而元空间使用的是直接内存,受本机可用内存的限制,并且永远不会得到java.lang.OutOfMemoryError

    可以使用 -XX:MaxMetaspaceSize 标志设置最大元空间大小,默认值为 unlimited,这意味着它只受系统内存的限制。
    -XX:MetaspaceSize 调整标志定义元空间的初始大小如果未指定此标志,则 Metaspace 将根据运行时的应用程序需求动态地重新调整大小。
    直接内存与非直接内存的测试

猜你喜欢

转载自blog.csdn.net/qq_37469055/article/details/106247171
今日推荐