Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java堆内存和栈内存的区别

Java堆内存和栈内存的区别

作者头像
PhoenixZheng
发布于 2018-08-07 08:29:57
发布于 2018-08-07 08:29:57
2K00
代码可运行
举报
运行总次数:0
代码可运行

堆栈,这个名词很多Java开发者在一开始学习Java的时候就经常听说了。

对于这个名词来说,它描述的其实是JVM的内存模型, 如果面试中问到,堆栈具体对应着什么,不知道是否了解?

堆和栈

其实堆栈是两个东西,在JVM中分别对应两个不同的内存部分。 对于JVM内存模型来说,只要记住下面这张图就足够了,

对于左边黄色的部分,就是JVM中的“堆”,相对应的右边的则是"栈"。

在Java中,Heap用来表示 堆。我们不作深入的研究,毕竟JVM是个庞大复杂的东西, 这里只基本介绍 JVM的基础知识部分。 比如 Heap是用来干啥的?

提示一下,平时经常实例化对象吧?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Student student = new Student();

这里实例化了的对象,就是存放在堆中。 具体的说,是存放在 Heap Memory中。

还有,静态变量也是在这里,还记得上面那张图嘛,黄色部分分了上下两个区, 其中一个叫 Method Area的区域,是用来存放静态变量的。

你应该知道大名鼎鼎的爆栈吧, StackOverFlow, 这个网站可能解决了平时我们开发中遇到的90%的问题。 其实 stack over flow本身是一种异常,这里的 stack 说的就是JVM里的栈。

而栈是用来干什么的呢, 举个例子,平时我们写的非静态方法,执行时就在栈里。 虽然这么说不够准确,因为要说明白方法的执行,需要了解栈帧的概念,但我们这里不作深入的分析。

现在不知道你是否明白,之前见过的 stack over flow异常是怎么回事。 如果足够好奇的话, 可以尝试写一个递归方法,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public boolean recursive() {
    ....
    return recursive();
}

然后尝试让这个递归无限的嵌套下去, 你就会看到 StackOverFlowException了, 原因就是因为 stack内存不足以运行方法。

总结

所以总的来说,JVM分为Head和Stack两个部分 对于初学者,只要初步了解了这个基础,基本能应付开发中遇到的问题。 但如果想要提高自己,最终都需要深入了解 JVM的内存模型。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android每日一讲 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JVM内存模型基础
我们知道运行一个Java应用程序,我们必须要先安装JDK或者JRE包。这是因为Java应用在编译后会变成字节码,然后通过字节码运行在JVM中,而JVM是JRE的核心组成部分。
架构狂人
2023/08/16
2040
JVM内存模型基础
JVM内存模型
内存结构是JVM中比较重要的存储结构,是硬盘和cpu之间的桥梁,JVM的内存结构规定了程序在运行过程中的内存的申请,分配,管理等一系列策略,保证了程序的高效有序地进行。因为本人的JDK为1.8版本,因此我去百度了一下Java8的内存结构图,如下:
ma布
2024/10/21
1140
JVM内存模型
jdk和jvm区别_java中集合和数组的区别
最近翻看了java线程相关的东西,书中有一边专门讲到java内存模型,读完之后边回想起java虚拟机模型,那时心中便在思考java内存模型(以下简称jmm)和java虚拟机模型(以下简称jvm)之间的关系,下面将详细讲述。
全栈程序员站长
2022/10/03
3160
jdk和jvm区别_java中集合和数组的区别
JAVA对象在JVM中内存分配
如果你还不了解JVM内存模型的建议您先看下JVM内存模型 以一下代码为例,来分析下,java的实例对象在内存中的空间分配(JDK1.8)。 public class Student { private String name; private static Birthday birthday = new Birthday(); public Student(String name) { this.name = name; } public sta
java404
2018/05/18
1.9K0
JAVA的内存模型及结构
所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?
哲洛不闹
2018/12/28
4020
JAVA的内存模型及结构
Java虚拟机内存结构(JVM)
Java7及以前版本方法区位于永久代中。同时,永久代和堆是相互隔离的,但它们使用的物理内存是连续的。
chenchenchen
2022/01/05
5300
Java虚拟机内存结构(JVM)
【Java】How Java Memory Works
Source How Java Memory Works?. Before we move on to the performence… | by Berkay Haberal | Jul, 2023
阿东
2023/09/12
1670
Java 基础面试题,JVM 内存模型?
我们在 Java 岗位的面试题中,大概率会碰到这样一个面试题:请你解释你对 JVM 内存模型的理解。
伍六七AI编程
2023/12/07
1440
Java 基础面试题,JVM 内存模型?
Java heap、no-heap 和 off-heap 内存基础与实践
在 Java 应用的内存管理中,Heap 、No-Heap 和 Off-Heap 是开发者优化性能和资源管理时不可忽视的关键组成部分。它们在 JVM 的运行中扮演着不同的角色,负责存储不同类型的数据结构和对象。随着现代应用程序的复杂性和规模不断提升,合理地分配和管理这三类内存,不仅可以提高系统的效率,还能在高并发、大数据处理等场景下有效避免性能瓶颈。
FunTester
2025/01/23
1220
Java heap、no-heap 和 off-heap 内存基础与实践
论 Java 中的内存分配
------------------------------------------------------------------------- Java内存分配主要包括以下几个区域: 1. 寄存器:我们在程序中无法控制 2. 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 3. 堆:存放用new产生的数据 4. 静态域:存放在对象中用static定义的静态成员 5. 常量池:存放常量 6. 非RAM(随机存取存储器)存储:硬盘等永久存储空间  ----------------
房上的猫
2018/03/14
1K0
一点一滴探究JVM之内存结构
本文主要介绍了Java虚拟机中的内存区域,包括方法区、堆、栈、本地方法栈、程序计数器等,以及这些区域的作用和相互之间的区别。同时,还通过一个例子来解释这些内存区域在实际编程中的应用。
Java后端工程师
2017/12/26
1.4K0
一点一滴探究JVM之内存结构
Java程序执行过程及内存机制
本讲将介绍Java代码是如何一步步运行起来的,其中涉及的编译器,类加载器,字节码校验器,解释器和JIT编译器在整个过程中是发挥着怎样的作用。此外还会介绍Java程序所占用的内存是被如何管理的:堆、栈和方法区都各自负责存储哪些内容。最后用一小块代码示例来帮助理解Java程序运行时内存的变化。
huofo
2022/03/18
3390
Java程序执行过程及内存机制
Java内存管理(一、内存分配)
关于Java内存分配,很多问题都模模糊糊,不能全面贯通理解。今查阅资料,欲求深入挖掘,彻底理清java内存分配脉络,只因水平有限,没达到预期效果,仅以此文对所研究到之处作以记录,为以后学习提供参考,避免重头再来。
bear_fish
2018/09/20
3.5K0
Java 内存模型简述
Java 内存在逻辑功能上分成 5 个区。方法区,堆区,JVM 栈,方法栈,程序计数器(PC 寄存器)。
水货程序员
2018/11/13
6000
内存空间分析图
JVM 的内存划分中,有部分区域是线程私有的,有部分是属于整个 JVM 进程;我们将这部分归为一类。
用户7353950
2022/05/10
5760
内存空间分析图
Java面试- JVM 内存模型讲解
经常有人会有这么一个疑惑,难道 Java 开发就一定要懂得 JVM 的原理吗?我不懂 JVM ,但我照样可以开发。确实,但如果懂得了 JVM ,可以让你在技术的这条路上走的更远一些。
健程之道
2019/11/02
8180
JAVA内存分析详解--笔记
原教程:https://www.bilibili.com/video/av30023103/?p=64 Java虚拟机的内存可以分为3个区域:栈(stack),堆(heap),方法区(method a
逆回十六夜
2019/08/07
4780
深入理解JVM之JVM内存区域与内存分配
在学习jvm的内存分配的时候,看到的这篇博客,该博客对jvm的内存分配总结的很好,同时也利用jvm的内存模型解释了java程序中有关参数传递的问题。
哲洛不闹
2019/07/10
6530
深入理解JVM之JVM内存区域与内存分配
C++内存模型,我们常说的堆栈究竟指什么?
今天我们来聊聊程序运行时的内存管理。很多同学可能对内存管理这个概念比较陌生,尤其是在校学生,没有接触过这个方面是非常正常的。虽然存在感不高,但是它在我们工程能力当中起到非常重要的一个部分。尤其是从事后端相关的开发的话,这是一个很重要的领域。很多设计和算法的出发点都是围绕内存管理展开的。
TechFlow-承志
2022/12/22
7910
C++内存模型,我们常说的堆栈究竟指什么?
深入理解JVM的内存区域划分
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。
沁溪源
2020/09/03
5400
相关推荐
JVM内存模型基础
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验