在Java中,类和对象的内存分配相信有很多同学和我一样不是很清楚的,今天想到了这个疑惑,决定理清这个头绪。
在java中内存总体分成四个部分:
stack segment(栈)
heap segment(堆)
code segment(代码段)
data segment(静态数据段);
然后我们再来剖析Java类中的内容,分析Java类(类封装了对象的属性和行为),可以分成以下几个部分:静态变量、成员变量、局部变量、成员方法、局部方法,大体上就是这些;
类的定义会装进代码段中,然后当实例化的时候,会把new一个实实在在的对象进堆中,堆中有成员变量(不包含基本数据类型)都在堆中(也即除了8大基础变量:byte、short、int、long、float、double、char、boolean),这些对象和变量的引用都会保存在栈中,并且指向堆中它们各自的位置,然后静态变量的话就是存在静态数据段,局部变量和基础变量存在栈中,各种方法的话是保存在代码段中的,只有当需要调用它们的时候才会加载到栈中进行相应操作,运行完后还是会被弹出栈的。