您的位置:首页 > 职场人生

java程序员从笨鸟到菜鸟(九)堆内存和栈内存

2018-03-08 11:11 288 查看
堆内存和栈内存的概念:
堆内存:首先是一片内存区域,用于存放由new创建的对象(实体)和数组,对象用于封装数据,当一个数据丢失,不会造成实体释放,堆内存不会随时释放;而栈不一样,栈里存放的都是单个变量,当变量消失,栈内存也跟着被释放。
栈内存:用于存放基本数据类型变量和引用数据类型变量,存储的都是局部变量,先加载函数才能对局部变量进行定义,所以是方法先进栈,然后再定义变量,变量有自己的作用域,一旦离开作用域,变量就被释放,栈内存的更新速度快,因为局部变量的生命周期都很短。

如:Student s = new Student();
运行机制:1. 先在堆内存中创建一块内存用于存放新建的对象;2. 在栈内存中存放变量s,s中存放的是该对象在堆内存中开始存放的物理地址。
堆内存和栈内存的区别:
1. 堆内存存储的都是实体(由new创建的对象和数组),栈内存存储的都是局部变量(基本数据类型变量和引用数据类型变量)。
2. 内存溢出,堆内存溢出抛出java.lang.OutOfMemoryError: Java Heap Space错误,栈内存溢出抛出java.lang.StackOverFlowError异常。
3.  和堆内存相比,栈内存要小的多(栈内存采用LIFO后进先出),栈内存的更新速度快。
4.  生命周期,栈内存的变量一旦结束就会被释放,而堆内存则会被java的垃圾回收机制不定时的进行回收(从程序运行开始到运行结束)。
5.  存储在堆中的对象是全局可以被访问的,而栈中的变量不能被其它线程访问。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 堆内存 栈内存
相关文章推荐