Jag*_*uar 2 java object classloader
我对将内存分配给Java程序的时间感到非常困惑.加载类时它是"部分完成的"吗?我已经阅读了类生命周期来加载 - >链接 - >初始化 - >卸载.即使我们不创建该类的对象,也不会在这些进程中消耗一些内存吗?
我也很想知道在类加载或对象创建过程中是否完成了初始化步骤?
非常感谢 !
在你可以"使用"一个类的实例之前,有三件事情需要发生,每个实例需要分配堆内存:
需要加载和链接类字节码以解决对其他类的任何静态依赖性.
该类需要初始化.
需要创建类的实例.
类的加载和链接通常在启动JVM时发生,尽管它可以由JVM"懒惰地"完成,并且可以动态完成; 例如使用Class.forName(...).这是分配"代码"类的内存时.
类初始化通常在第一次实际使用类之前完成.(具体细节见JLS).这是在分配类静态的内存时.
new使用构造时会发生类创建.这也将触发尚未初始化的类的类初始化.这是在分配实例的内存时.
除了上述内容之外,JVM在某些时候可以运行JIT编译器将类的字节码转换为本机代码.何时(以及确实如此)发生这种情况取决于JVM版本和JVM启动选项.JIT编译当然会分配内存来保存类编译的本机代码.
| 归档时间: |
|
| 查看次数: |
3666 次 |
| 最近记录: |