堆 | 栈

堆 | 栈


堆栈的共同点

堆和栈都存在于进程的虚拟内存里面

堆栈的差异

1.栈(Stack)是操作系统在创建进程或者线程时候自动为其分配的内存空间;而堆(Heap)是应用程序在运行时请求操作系统分配给自己的内存空间
2. 栈内存存储的是局部变量而堆内存存储的是对象/实体
3.栈的使用性能更高,因为由系统自动分配,系统专门为其准备寄存器,同时有专门的出栈和入栈指令,因而效率比较高
4.维护机制不同:栈是自行维护。堆受垃圾处理器GC管理
5.储存数据的生命周期不同:函数方法先进栈,然后再定义变量,变量有自己的作用域,一旦离开作用域,变量就会被释放。栈内存的更新速度很快,因为局部变量的生命周期都很短;一个对象/实体,没有引用数据类型指向的时候,它在堆内存中不会被释放,而被当做一个垃圾,在不定时的时间内自动回收。

小总结

当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法内定义的变量将会逐个放入这块栈内存里,随着方法的执行结束,这个方法的内存栈也将自然销毁。因此,所有在方法中定义的局部变量都是放在栈内存中的; 在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用(因为对象的创建成本通常较大),这个运行时数据区就是堆内存。堆内存中的对象不会随方法的结束而销毁,即使方法结束后,这个对象不会随方法的结束而销毁,即使方法结束后,这个对象还可能被另一个引用变量所引用(在方法的参数传递时很常见),此时这个对象依然不会被销毁。 只有当一个对象没有任何引用变量引用它时,系统的垃圾回收器才会在合适的时候回收它。

参考资料

https://blog.csdn.net/qq_41885871/article/details/100562192?utm_source=app
https://blog.csdn.net/pt666/article/details/70876410?utm_source=app
https://b23.tv/BV11K4y1b7UF

你可能感兴趣的:(堆 | 栈)