Java中的类加载与对象创建
我对Java程序分配内存的时间感到非常困惑。加载类时是否“部分完成”?我已经阅读了要加载的类生命周期->链接->初始化->卸载。即使我们不创建该类的对象,这些进程中不会消耗一些内存吗 我也想知道初始化步骤是在类加载还是对象创建期间完成的Java中的类加载与对象创建,java,object,classloader,Java,Object,Classloader,我对Java程序分配内存的时间感到非常困惑。加载类时是否“部分完成”?我已经阅读了要加载的类生命周期->链接->初始化->卸载。即使我们不创建该类的对象,这些进程中不会消耗一些内存吗 我也想知道初始化步骤是在类加载还是对象创建期间完成的 非常感谢 VM使用内存,然后VM中的Java对象使用内存。类加载器和对象占用内存,但当您使用“新”表达式构造类时,会为该类的特定实例分配内存。但是,确实存在一些小的、固定数量的开销内存,以便能够引用和实例化特定类型。Jvm将在您执行new时分配内存,除非您调用s
非常感谢 VM使用内存,然后VM中的Java对象使用内存。类加载器和对象占用内存,但当您使用“新”表达式构造类时,会为该类的特定实例分配内存。但是,确实存在一些小的、固定数量的开销内存,以便能够引用和实例化特定类型。Jvm将在您执行
new
时分配内存,除非您调用static
方法,在这种情况下,Jvm还将创建类。在您可以“使用”之前需要做三件事类的一个实例,每个实例都需要分配堆内存:
Class.forName(…)
。这是为类“代码”分配内存的时候
类初始化通常在第一次实际使用该类之前立即完成。(具体细节见JLS)。此时将为类statics分配内存
使用new
构造时会创建类。这还将触发尚未初始化的类的类初始化。这是为实例分配内存的时间
除上述内容外,JVM可能会在某个时候运行JIT编译器,将类的字节码转换为本机代码。何时(以及是否)发生这种情况取决于JVM版本和JVM启动选项。JIT编译当然会分配内存来保存编译的本机代码类
我当时很困惑
哪个内存分配给Java
节目
那是因为没有时间了。内存分配和释放在Java程序的整个生命周期中不断发生。您所说的“它还将创建类”是什么意思?请解释一下,这个答案有误导性。调用
静态
方法不会“创建”类。它甚至不一定会导致类初始化。(可能已经发生了。)类将被加载(由类加载器加载),我确信这就是他想要用“类创建”(与“实例创建”无关)来表达的意思。你能解释一下“类对象”包含什么吗?它们不包含简单对象之类的实例变量吗?@Raj,不。类的实例包含成员变量。类对象是“类”类型的实例,包含描述类的函数、字段等的元数据。(将其视为“.class”文件的编程表示)。