`

堆与栈

 
阅读更多
接触编程有段时间了.一直没深入堆栈问题。这一次一定要深度解析把他一次搞定.


 


Java把内存划分成两种:一种是栈内存,一种是堆内存。

Stack:翻译为栈或堆栈,指的就是一种后进先出的数据结构。
Heap :堆,堆是一个无序的结构。
Stack有时候翻译成堆栈,是因为heap是stack的组成单元。


是一个运行时数据区,对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式地释放。堆是由垃圾回收来负责的.

优点:可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收 集器会自动收走这些不再使用的数据。

缺点:由于要在运行时动态分配内存,存取速度较慢。


是用来存放一些原始数据类型的局部变量数据和对象的引用(String、数组、对象等等)但不存放对象内容。存放一些基本类型的变量数据(int,short,long,byte,float,double,boolean,char)和对象引用。
引用在白皮书中直接指出是实际就是一个C的"指针"。

优点:存取速度比堆要快,仅次于寄存器,(不是寄存器)。栈数据可以共享。

缺点:是,存在栈中的数据大小与生存期必须是 确定的,缺乏灵活性。


总结.
栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)
堆:存放所有new出来的对象。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics