对于Java程序在运行时创建对象的内存分配流程,先上图
首先说一下类的结构,看上图,这个Person类的结构很简单,名字、年龄、和国籍(静态变量),并在PersonDemo类中对Person创建了三个实例。在Java程序运行开始, 第一步JVM在方法区中分配了class内容区,将Person.class和PersonDemo.class字节码文件加载到该区域,由于两个类都存在静态方法和静态变量,所以也同时分配了静态区内的静态成员。
在程序的类加载完毕后,开始执行main方法了,在栈内存中分配空间给main方法(通常我管这个叫进栈)。
开始创建对象,首先初始化对象,p1对象的name为null,age为0,country静态变量为null,然后通过构造方法为对象属性赋值。然后调用对象的show()方法(进栈,当方法执行后,GC会对该内存进行回收)。同理,当 p2和p3对象创建时与p1对象创建流程一致,只是对于static静态变量不会再初始化和赋值,因为static修饰的变量是对类共有的。