内存分为codesegment、datasegment、stack、heap。
程序执行过程
1、操作系统(windows或java虚拟机)把硬盘文件(exe或class文件)加载到代码区(codesegment)。
2、从main方法开始执行:
局部变量保存在栈内存stack;
对象保存在堆内存heap;
字符串常量在datasegment,静态变量的引用也在datasegment
方法只有一份,执行的时候才占用内存。同一类的对象共享该类的方法,非静态方法是针对每个对象进行调用。
this 和 supper,父类对象在子类对象内部
方法执行过程的内存过程
public class Person { int id; int age; Person(int _id, int _age) { id = _id; age = _age; } public static void main(String[] args) { Person tom = new Person(2, 25); } }
1、在栈空间创建一个引用类型的变量 tom。
2、调用Person 类的构造方法,在堆内存创建一个对象。里面有两个成员变量 id 和 age,默认值都为0。并把这个对象的堆内存参考赋值给tom变量。
3、构造方法执行,变量 _id 和 _age 是方法的形参,是局部变量,在栈空间创建这两个变量。分别把常量2、25赋值给 _id 和 _age。
4、把 _id 和 _age 的值赋值给堆内存里的 id 和 age。
5、构造方法执行完毕,变量_id 和 _age清空。