创建对象的内存及流程分析(部分转载)

借鉴对象内存分析
对象创建步骤分析

在java中提倡万物皆对象的思想,所以对于创建一个对象时的内存分析显得很有必要

java中程序运行流程
java程序运行分为两个流程,分别为编译执行,在编译阶段java编译器将源代码解释成字节码(即class文件),然后由JVM进行运行class文件
下面的对象的创建是指的是运行期间的操作

对象创建的流程分析

  • 由new关键字发出开辟堆内存空间的指令,并返回所开辟空间的地址

一个对象的创建分为4步

在对象初始化之前进行类的加载加载检查, 在类的加载过程中,类的static成员变量会被初始化,另外,如果类中有static语句块,则会执行static语句块。static成员变量和static语句块的执行顺序同代码中的顺序一致。记住,在Java中,类是按需加载,只有当需要用到这个类的时候,才会加载这个类,并且只会加载一次。看下面这个例子就明白了:

public class Test {
    public static void main(String[] args) throws ClassNotFoundException {
         
        Bread bread1 = new Bread();
        Bread bread2 = new Bread();
		A a=new A();
    }
}
 
 
class Bread {
    static{
        System.out.println("Bread is loaded");
    }
    public Bread() {
        System.out.println("bread");
    }
}

class A{
	static {
		System.out.println("hello");
	}
}

output:
Bread is loaded
bread
bread
hello

 

  • 分配对象空间,并将对象成员变量初始化为0或为空, 执行属性值的显示初始化

  • 执行构造方法

  • 返回对象的地址给相关变量

  • 对象的内存分析

先完成类的加载(包含对static属性和方法的加载,也包含对main函数的加载)然后再执行

对象内存分析

posted @ 2022-10-23 00:00  一往而深,  阅读(37)  评论(0编辑  收藏  举报