堆栈区别java总结_java 堆栈的区分,区别

为了直观,直接通过代码演示:

ed1a1741048e84e56c22fae4513da84a.png

堆栈划分图:

9146ad08638271cfaf111955094000a9.png

堆栈区别:

基于上边的解释我们可以很简单的总结出堆和栈的区别:

1、应用程序所有的部分都使用堆内存,然后栈内存通过一个线程运行来使用。

2、不论对象什么时候创建,他都会存储在堆内存中,栈内存包含它的引用。栈内存只包含原始值变量好和堆中对象变量的引用。

3、存储在堆中的对象是全局可以被访问的,然而栈内存不能被其他线程所访问。

4、栈中的内存管理使用LIFO的方式完成,而堆内存的管理要更复杂了,因为它是全局被访问的。堆内存被分为,年轻一代,老一代等等

5、栈内存是生命周期很短的,然而堆内存的生命周期从程序的运行开始到运行结束。

6、我们可以使用-Xms和-Xmx JVM选项定义开始的大小和堆内存的最大值,我们可以使用-Xss定义栈的大小

7、当栈内存满的时候,Java抛出java.lang.StackOverFlowError异常而堆内存满的时候抛出java.lang.OutOfMemoryError: Java Heap Space错误

8、和堆内存比,栈内存要小的多,因为明确使用了内存分配规则(LIFO),和堆内存相比栈内存非常快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值