对象

作者: 没风的地方 | 来源:发表于2018-01-18 12:00 被阅读2次

    什么是对象?

    了解对象,我们先要了解对象如何产生,了解对象如何产生则要先了解java程序的执行过程(此处莫名想到追妹子)。。

    java程序执行过程:1 系统创建虚拟机 2 虚拟机使用自身的Class Loader加载到虚拟机内存中的方法区,具体看虚拟机内存结构

    类文件加载完成后,主线程运行 main()方法,每次运行一个方法,对应的线程都会建栈帧,压栈。每当线程执行到new Object,也就是实例化一个对象的时候,会在堆(Heap)里面保存对象,对象的创建其实就是在堆(Heap)中给实例对象分配内存。

    对象在虚拟机内存分区之一的堆(Heap)中的位置如下:

    说明:

    对象头:包含着两个部分:一部分存储自身在运行时的标识,比如GC标志、锁状态。另一部分存储指向类方法和静态变量的指针。

    实例变量:存放类的属性信息,当然也包括父类的属性信息。

    填充数据:非必须,虚拟机要求对象的其实位置必须为8的位数,如果不是,则需要填充。

    我们在new一个对象时,现在常量池中查找,看是否存在类的符号引用,有证明这个类被加载到方法区了。如果没有,则先把类加载到方法区,再在堆中分配内存。

    如果对象声明为局部使用,类的变量在栈帧的局部变量表,对象的引用在栈帧。

    如果对象声明为实例变量,类的变量在堆中,对象的引用在堆中。

    如果对象声明为静态变量,类的变量在方法区,对象的引用在方法区。

    相关文章

      网友评论

          本文标题:对象

          本文链接:https://www.haomeiwen.com/subject/qevioxtx.html