heap和stack是java内存中数据存储的表现方式。
heap和stack的共享分为两种方式:1、数据共享 2、线程共享。
简单来说stack是数据共享,heap是线程共享。
例如:int a = 1;
int b = 1;
运行开始编译器首先处理int a = 1;首先会创建一个a的引用,然后去查询字面值1的地址,如果没有找到,就创建一个字面值为1的地址,然后将a指向这个地址,再处理int b = 1;去查找地址为1的地址,找到了,就把b指向这个引用地址,此时栈中ab都指向了1的地址,也就是数据共享了。
对于heap来说,只能有一个引用对象,每一个线程都有自己的stack,所有线程的stack都是不共享的,只有heap是共享的。
stack主要是存储基本数据类型,对象的引用等,数据执行完毕后,变量会立马释放,节省资源,栈中没有默认初始值,要手动设置。
heap存放的是new创建的对象和数组,heap中的实体是用来封装对象的,当实体没有指向是,就会被GC自动回收。
网友评论