1.
基本类型占一块内存。
引用类型占两块。
2.
类是静态概念。
函数中定义的基本类型变量和对象的引用类型变量都在函数的栈内存。
局部变量存在栈内存。
new创建的对象和数组,存在堆内存。
java虚拟机自动垃圾回收器管理堆内存。
栈式存储分配即动态存储分配。
堆主要用来存放对象,栈主要用来执行程序。
栈的存储速度快,仅次于寄存器,栈数据可共享,但栈中数据大小与生存周期必须确定。主要存放基本类型变量和对象句柄。
运行时才能确定所占内存大小的,存在堆内存。
栈数据共享理解:
int a = 3;
int b = 3;
编译器先处理int a = 3,在栈中创建变量a的引用,然后查找栈中是否有3这个值,如果没找到,就将3存进来,然后将a指向3。
处理int b = 3,创建完b的引用后,在栈中找到3这个值,则直接将b指向3,由此节省空间。
和对象引用不同,如另a再等于4,则将a指向4,b依然指向3,a的改变不影响b,这个过程由编译器完成。
3.
类的成员变量在不同的对象中有不同的值(静态变量例外),但方法只有一份,在执行的时候才占用内存,不同对象共享类的方法。
方法传入的参数,形参,也在栈内存中。
方法调用完成后,方法所有占用的内存空间都释放。
4.
常量和静态变量,存在data内存中。