内存总体分为了4个部分,包括 stack segment 、heap segment、code segment 、data segment ;
其中我们程序中用关键字new出来的东西都是存放在heap segment;
程序中的局部变量存放在stack segment,这些局部变量是在具体方法执行结束之后,系统自动释放内存资源(而heap segment中的资源需要java垃圾回收机制来处理);
static静态变量,需要放在内存中的data segment中,
classA a;
若classA是引用类型(String、继承自object,实现接口)那么不会分配空间,空间在new之后分配
若是值类型(基元类型、结构、枚举)就会分配空间
栈是存放函数调用过程中的临时变量的 堆是程序运行过程中动态申请的内存的存放处的比如new的对象就在堆上
所有局部变量都是放在栈内存里保存的,不管其是基本类型的变量,还是引用类型的变量,都是存储在格子的方法栈区中;但引用类型变量所引用的对象(包括数组,普通java对象)则总是存储在堆内存中。
希望能帮到你 |