gpt4 book ai didi

java - Java 中的类加载与对象创建

转载 作者:行者123 更新时间:2023-12-02 08:19:22 24 4
gpt4 key购买 nike

我对Java程序分配内存的时间感到非常困惑。加载类时是否“部分完成”?我读到类的生命周期是加载->链接->初始化->卸载。即使我们没有创建该类的对象,这些过程中是否会消耗一些内存?

我也很想知道初始化步骤是在类加载还是对象创建期间完成的?

非常感谢!

最佳答案

在“使用”类的实例之前需要完成三件事,每一件都需要分配堆内存:

  1. 需要加载和链接类字节码以解决对其他类的任何静态依赖关系。

  2. 该类需要初始化。

  3. 需要创建该类的实例。

类的加载和链接通常在启动 JVM 时发生,尽管它可以由 JVM“延迟”完成,也可以动态完成;例如使用Class.forName(...)。这是为类“代码”分配内存的时候。

类初始化通常在第一次实际使用该类之前完成。 (具体细节在 JLS 中列出)。这是为类静态分配内存的时间。

使用 new 构造时会创建类。这也会触发尚未初始化的类的类初始化。这是为实例分配内存的时间。

除上述之外,在某些时候,JVM 可能会运行 JIT 编译器将类的字节码转换为 native 代码。何时(以及是否)发生这种情况取决于 JVM 版本和 JVM 启动选项。 JIT 编译当然会分配内存来保存编译后的类的 native 代码。

关于java - Java 中的类加载与对象创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3528321/

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