栈和堆分别存放什么 栈和堆的区别

1.共同点:堆和栈是Java中用来在RAM中存储数据的地方 。
2.差异:
(1)堆栈:在Java中,每个线程都有一个堆栈区 , 每个堆栈中的元素都是私有的 , 不被其他堆栈访问 。堆栈具有后进先出(LIFO)的特性 。堆栈中数据的大小和生命周期都是固定不变的 。但是访问速度比栈快 , 仅次于CPU中的寄存器 , 栈中的数据是共享的 。在Java中 , 所有的基本数据类型和引用变量(对象引用)都存储在堆栈中 , 堆栈中数据的survival 空一般都在当前作用域中 , 也就是“{}”部分,比如函数和局部变量的参数值,会被自动清空 。
基本数据类型:Java有八种基本数据类型,分别是byte、short、int、long、float、double、boolean、char;
用下面的例子来说明:int m = 2;
int n = 2;
基本数据类型定义好了,这些字符的数据、大小、生命周期就知道了;编译器首先处理int m = 2;首先在栈中用变量M创建一个引用,然后找出是否有值为2的地址,如果没有,用字值2打开一个新地址,然后将M指向地址2 。然后处理int n = 2;在创建了n的引用变量后,因为有一个值2,所以将n指向2的地址 。这样,(m==n)成立,即m和n指向同一个地址 。
类对象的引用类型:不同于文字引用,当一个类对象的引用同时指向一个地址时,如果对象内部状态发生变化,另一个对象的引用变量也会发生变化 。相反,当m的值在m的定义之后被修改,即m=3时,那么n不会改变,仍然等于2 。
(2) Heap:只有一个Heap):Java,所有线程共享 。堆中的数据没有顺序(只要逻辑上连续) 。堆中的数据不需要提前告诉编译器它的生存期,内存的大小是可以动态分配的(动态申请内存空),导致访问速度慢 。Java中的垃圾收集机制会自动收集未使用的数据 。在Java中,new创建的所有对象都在堆中 。当垃圾收集机制检测到某个对象没有被引用时,它会自动销毁该对象 。
【栈和堆分别存放什么 栈和堆的区别】包数据:Java中包数据的类型包括字节、短、整数、长、浮点、双精度、布尔和字符 。这些数据类型都存储在堆中 。Java中通过new()操作显示的内容告诉编译器,当运行时根据需要动态创建它们时 , 缺点是速度慢 。
类型String:是一个特殊的包装器类 , 也是通过new()操作动态创建数据,例如:String S1 = new String(" ABCD ");
(3)方法区:也叫静态区,像heap一样被所有线程共享;该方法包含所有类和静态变量;方法在整个程序中总是唯一的元素,比如类和静态变量 。

    推荐阅读