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

本文详细解释了堆内存和栈内存的概念及其区别,包括它们各自的用途、生命周期、存储内容及内存溢出的情况。此外还介绍了对象如何在堆内存中创建以及栈内存如何存储变量。

堆内存和栈内存的概念:

堆内存:首先是一片内存区域,用于存放由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.  存储在堆中的对象是全局可以被访问的,而栈中的变量不能被其它线程访问。

版权声明:欢迎转载, 转载请保留原文链接。https://mp.youkuaiyun.com/postedit/79481534

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值