java中一个对象产生,使用的内存图
一个对象产生,使用到的是内存中的堆、栈和方法区。
1.程序启动时,方法区最先有数据。方法区保存class数据。如代码所示,student.class中的成员变量和成员方法,还有StudentDemo中的的main方法首先在方法区中保存。main方法为程序入口,main方法首先加载。
2.main方法进入栈空间。
3.创建一个student对象。
4.new一个student,new的新对象。new出的对象,操作全在堆中完成。
5.new出的新类,新类的内容,在方法区找到新类的内容,并且在堆中产生新类的内容。并且将新类的成员变量赋予新的值。new出的对象,其成员方法,保存的是一个地址值(0x333)。成员变量会去方法区参考,生成对应的成员方法。
6.进行复制操作的时候,栈中创建的对象根据地址去堆中找到对应的地址,进行赋值操作。=根据地址找到对应的值。
7.赋值操作。根据栈中的对象,找到堆中对象对应的地址,用对应值,替代堆中变量对应的值。
8.成员方法的调用。根据栈中的对象,找堆中的成员方法,在根据堆中的成员方法,找到方法区中对应的成员方法。方法区中的方法需要运行,是要进入栈中才能运行。(栈中先来的在底下,后来的在上面,遵循先进后出的原则)。
9.调用完成后的成员方法,完成出栈操作。最后main方法完成出栈操作,整个程序完成。最后gc处理剩下的事情。
一个对象产生到结束的整个过程。