JVM瞎琢磨之堆栈理解

本文探讨JVM内存模型中堆和栈的划分,阐述它们的职能与好处。栈主要存储局部变量、操作逻辑,是线程私有的,而堆用于存储对象和数组,为多线程共享。堆栈分离有利于数据和逻辑隔离,模块化设计,减少资源消耗。同时,栈中保存引用,堆中存储数据,实现面向对象设计。理解堆栈对于优化程序性能和避免StackOverflowError异常至关重要。
摘要由CSDN通过智能技术生成

众所周知,JVM的内存模型分为方法区,堆,栈(虚拟机栈),本地方法栈,程序计数器。其中方法区和堆为线程共享,其余三类为线程私有。大部分的文章都在讲解其作用,但是为什么这么划分却并未涉及,本文从堆栈的职能角度剖析,抛砖引玉,希望能带来启发。

首先从存储方面来理解:

栈存什么?

栈存储的是局部变量表,动态链接,操作数栈,方法出口,等与线程方法相关的信息,总之是为操作逻辑服务。由于每个线程都有自己的逻辑,所以栈是线程私有的。

堆存什么?

堆存储的是实例对象和数组,简而言之是一些基础数据。即为所有方法提供数据支撑,所以是公共区域多线程共享。

这样做有几个好处:

1从软件设计的角度理解,堆栈的划分就是为了将数据与逻辑区分开来。相当于隔离,模块化,这是软件设计中的一个重要的思想。

2堆栈的分离,使得一些多方法多线程可共用的数据只保存一份就可以,不必每次都在私有栈中创建取值,即堆中存放具体数据,栈中存放引用,数据大小不可控,但是一个引用只有4byte,这样既节约了资源又提供了一种有效的数据交互方式。(有一点需要注意,基本类型数据的值是直接保存在栈中的,因为基本类型只有1-8个字节,且不会动态增长,有小有可控所以直接放在栈内方便取用)

3非常好的实现了面向对象的设计思想,面向对象更接近于自然的方式思考,把对象拆分开,其实对象的属性就是数据,一般保存在堆中;而结构及行为就相当于逻辑,存放在栈中。我们在编写代码的时候既编写了栈中的内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值