gpt4 book ai didi

java-8 - Java 8 中是否仍然存在方法区域?

转载 作者:行者123 更新时间:2023-12-04 22:39:57 24 4
gpt4 key购买 nike

在 Java 8 之前,我们有 5 个主要的运行时数据区域:

  • 方法区
  • JVM 堆栈
  • PC 寄存器
  • native 方法堆栈

  • With Java 8, there is no Perm Gen, that means there is no more “java.lang.OutOfMemoryError: PermGen”



    这很棒,但我也读过

    Method Area is part of space in the Perm Gen



    但我似乎找不到任何明确说明 Java 8 中不再有方法区域的内容。

    So is Perm Gen along with Method area got removed or only Perm Gen got removed and Method area is still present in old generation.



    请附上您可能看到的与 Java 8 内存模型相关的任何好的源 Material

    最佳答案

    Method Area是规范中描述的逻辑概念,每个 JVM 都有一个方法区,但这并不意味着它必须反射(reflect)在实现代码中。同样,Java Heap Space在规范中被指定为一个概念,是所有 Java 对象的存储,因此所有 Java 对象都存储在堆中,根据定义,不管它是如何实际实现的。

    与包含 Java 对象和非 Java 对象的 JVM 数据结构的 Perm Gen 不同,HotSpot JVM for Java 8 的内存布局有明确的分离。 Old Gen 仍然只包含 Java 对象,而 Metaspace 只包含 JVM 特定的数据,没有 Java 对象。因此,以前存储在 Perm Gen 中的 Java 对象已移至 Old Gen。由于方法区包含工件“例如运行时常量池、字段和方法数据,以及方法和构造函数的代码……”,在其他方面词非 Java 对象(尽管池可能包含对堆对象的引用),它现在是元空间的一部分。

    您现在可以讨论元空间是方法区的实现还是可能包含比方法区更多的内容,但这没有实际意义。实际上,JVM 包含管理元空间及其包含的工件的代码,并且不需要关心这些工件在逻辑上是否属于规范描述的“方法区”。

    关于java-8 - Java 8 中是否仍然存在方法区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50163218/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com