html5网站建设加盟,百度贴吧论坛,广告做网站,网站 asp php内存中为什么要区分栈和堆 1. 概述
嗨#xff0c;大家好Java 面试合集又来了#xff0c;今天我们分享的主题很大众化以及普通。无论是Java 语言本身还是别的语言都会有所涉及#xff0c;但是今天我们从Java角度来讲下
2. 分析 今天我们会从多个方向来分享这个话题 2.1 栈是…内存中为什么要区分栈和堆 1. 概述
嗨大家好Java 面试合集又来了今天我们分享的主题很大众化以及普通。无论是Java 语言本身还是别的语言都会有所涉及但是今天我们从Java角度来讲下
2. 分析 今天我们会从多个方向来分享这个话题 2.1 栈是运行时单位堆是存储的单位
其实堆是存储的单位我们一般都可以理解。因为我们会发现我们创建的对象都会存放到堆中而暴露出一个地址。
我们通过变量来保存这个地址从而实现访问。
那我们如何理解栈是运行时单位呢。 就是我们在执行类中的方法每个方法的上下文信息(局部变量程序运行状态以及返回值等)都会存放到栈中以及什么时候存放到栈中什么时候从栈中销毁。
当然栈中也是存放一些信息的这个我们之后会详细的解释。
2.2 栈堆分离有助于数据共享
在Java中一个线程就会有一个线程栈与之对应。因为不同线程执行不同的逻辑因此需要一个独立的线程栈 而堆是所有线程共享的。使得堆中的内容被多个栈共享。
2.3 划分空间大小
栈只能向上增长因此就会限制住栈存储内容的能力。而堆不同堆中的对象是可以根据需要动态增长的因此栈和堆的拆分使得动态增长成为可能相应栈中只需记录堆中的一个地址即可
2.4 为什么不把基本类型放到堆中
基本类型占用空间比较小。基本类型的长度是固定的不会出现动态增长所以其实放到栈中就足够了堆中我们一般会存放一些对象这种对象的大小不一定这种情况栈中是无法满足的。所以堆中存的是对象。栈中存的是基本数据类型和堆中对象的引用