黑马程序员技术交流社区

标题: java内存分配 [打印本页]

作者: 陌上桑    时间: 2015-6-20 16:25
标题: java内存分配
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会自动指引存放资源的位置,.退出函数的时候,修改栈指针就可以把栈中的内容销毁,这样的模式速度最快。栈中数据可共享  为一个新变量赋值时,会首先在栈中搜索是否存在这个值,若存在就将该变量的引用指向存储该数据的区域。
      堆从操作系统管理的内存分配,所以在分配和销毁时都要占用时间,因此用堆的效率非常低.

作者: 挥斥方遒    时间: 2015-6-20 17:01
已学习并记录。谢谢楼主
作者: Monster    时间: 2015-6-20 20:15
再来复习一下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2