Java把内存分为栈内存和堆内存。两者的主要区别是:
|
|
栈内存 |
堆内存 |
|
存放内容 |
(1)在函数中定义的基本类型变量 (2)在函数中定义的对象的引用变量 |
new产生的对象和数组 |
|
回收方式 |
自动回收:在函数体(即在{}之内)中定义的变量,如果超过了函数体,将自动回收。 |
由垃圾回收器回收。 |
栈内存,堆内存和垃圾回收器的关系:
在堆中分配内存给新产生对象或者数组的同时,还在栈中产生一个特殊变量,这个特殊变量的取值等于对象或者数组在堆内存中的首地址。当这个特殊变量超过了函数体{},被自动回收后,那么在堆中分配的那块儿内存就变成了垃圾。这个时候就可以启动垃圾回收器进行回收了。
例如,说出Strings =newString("xyz")的内存分配形式?
答案:在堆内存开辟为对象"xyz"开辟内存,在栈内存创建引用变量s,指向对象"xyz"。
感谢金丝燕大学校长
本文深入解析Java内存管理,详细对比栈内存和堆内存的特点,阐述它们如何存放不同类型的变量,并解释垃圾回收器如何在堆内存中回收不再使用的对象。通过例子展示Strings=newString(xyz)的内存分配过程。

被折叠的 条评论
为什么被折叠?



