【Java 面试合集】内存中为什么要区分栈和堆
创始人
2024-05-26 07:48:16

内存中为什么要区分栈和堆

在这里插入图片描述

1. 概述

嗨,大家好Java 面试合集又来了,今天我们分享的主题很大众化以及普通。无论是Java 语言本身还是别的语言都会有所涉及,但是今天我们从Java角度来讲下

2. 分析

今天我们会从多个方向来分享这个话题

2.1 是运行时单位,是存储的单位

其实堆是存储的单位,我们一般都可以理解。因为我们会发现我们创建的对象,都会存放到堆中,而暴露出一个地址。

我们通过变量来保存这个地址,从而实现访问。

那我们如何理解栈是运行时单位呢。
就是我们在执行类中的方法,每个方法的上下文信息(局部变量,程序运行状态,以及返回值等)都会存放到栈中,以及什么时候存放到栈中,什么时候从栈中销毁。

当然栈中也是存放一些信息的,这个我们之后会详细的解释。

2.2 栈堆分离,有助于数据共享

在Java中一个线程就会有一个线程栈与之对应。因为不同线程执行不同的逻辑,因此需要一个独立的线程栈
而堆是所有线程共享的。使得堆中的内容被多个栈共享。

2.3 划分空间大小

栈只能向上增长,因此就会限制住栈存储内容的能力。而堆不同,堆中的对象是可以根据需要动态增长的,因此栈和堆的拆分,使得动态增长成为可能,相应栈中只需记录堆中的一个地址即可

2.4 为什么不把基本类型放到堆中

  • 基本类型占用空间比较小。
  • 基本类型的长度是固定的,不会出现动态增长
  • 所以其实放到栈中就足够了,堆中我们一般会存放一些对象,这种对象的大小不一定,这种情况栈中是无法满足的。
  • 所以:堆中存的是对象。栈中存的是基本数据类型和堆中对象的引用

相关内容

热门资讯

demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...