对象
2018-01-18 本文已影响2人
没风的地方
什么是对象?
了解对象,我们先要了解对象如何产生,了解对象如何产生则要先了解java程序的执行过程(此处莫名想到追妹子)。。
java程序执行过程:1 系统创建虚拟机 2 虚拟机使用自身的Class Loader加载到虚拟机内存中的方法区,具体看虚拟机内存结构。
类文件加载完成后,主线程运行 main()方法,每次运行一个方法,对应的线程都会建栈帧,压栈。每当线程执行到new Object,也就是实例化一个对象的时候,会在堆(Heap)里面保存对象,对象的创建其实就是在堆(Heap)中给实例对象分配内存。
对象在虚拟机内存分区之一的堆(Heap)中的位置如下:
说明:
对象头:包含着两个部分:一部分存储自身在运行时的标识,比如GC标志、锁状态。另一部分存储指向类方法和静态变量的指针。
实例变量:存放类的属性信息,当然也包括父类的属性信息。
填充数据:非必须,虚拟机要求对象的其实位置必须为8的位数,如果不是,则需要填充。
我们在new一个对象时,现在常量池中查找,看是否存在类的符号引用,有证明这个类被加载到方法区了。如果没有,则先把类加载到方法区,再在堆中分配内存。
如果对象声明为局部使用,类的变量在栈帧的局部变量表,对象的引用在栈帧。
如果对象声明为实例变量,类的变量在堆中,对象的引用在堆中。
如果对象声明为静态变量,类的变量在方法区,对象的引用在方法区。