1、毕老师对象初始化8步骤
Person p= new Person(“ajdhfakj”,20)
1)检测Person.class 文件,加载Person.class文件到jvm内存中
2) 执行该类中的static代码块。
static{
System.out.println(s_StaticField);
System.out.println("子类--静态初始化块");
}
3) 在堆内存开辟空间,分配内存地址
4) 在堆内存中建立对象的特有属性,并进行默认初始化
5) 属性显示初始化
6) 对象代码块初始化(函数不是块,只有调用时才初始化)
7) 对象构造函数初始化 (至此,对象实例化完成)
8) 内存地址赋给栈内存中对象变量
2、 堆内存与栈内存
栈内存:基本类型的变量和对象的引用变量
堆内存:存放由new创建的对象和数组
引用变量定义时在栈中分配内存,引用变量在程序运行到作用域外释放。而数组、对象本身在堆中分配,在没有引用变量指向它的时候,才变成垃圾,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。
Stack Pointer会自动指引存放资源的位置,.退出函数的时候,修改栈指针就可以把栈中的内容销毁,这样的模式速度最快。栈中数据可共享 为一个新变量赋值时,会首先在栈中搜索是否存在这个值,若存在就将该变量的引用指向存储该数据的区域。
堆从操作系统管理的内存分配,所以在分配和销毁时都要占用时间,因此用堆的效率非常低.
|
|