Java堆内存和栈内存的区别

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

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

堆和栈

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

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

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

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

Student student = new Student();

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

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

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

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

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

public boolean recursive() {
    ....
    return recursive();
}

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

总结

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

原文发布于微信公众号 - Android每日一讲(gh_f053f29083b9)

原文发表时间:2018-05-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏平凡文摘

JDK 10 的 109 项新特性

11720
来自专栏沈唁志

基于ThinkPHP中App(通信)接口开发封装JSON数据 并读取JSON数据的封装

1.1K20
来自专栏Python

python常用模块

 python常用模块 什么是模块?    常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。    但其实i...

378110
来自专栏Spark学习技巧

SparkSql的优化器-Catalyst

一,概述 为了实现Spark SQL,基于Scala中的函数编程结构设计了一个新的可扩展优化器Catalyst。Catalyst可扩展的设计有两个目的。 首先,...

29890
来自专栏PHP在线

PHP 底层的运行机制与原理

原文出处: nowamagic 欢迎分享原创到伯乐头条 PHP说简单,但是要精通也不是一件简单的事。我们除了会使用之外,还得知道它底层的工作原理。 PHP是...

47070
来自专栏程序猿DD

Java中的即时编译(Just-in-time compilation)

作者:知秋 原文:http://t.cn/RYLPEMc 像其他一些编程语言一样,Java通常也被称为“编译语言”。但有时你可能会感到困惑,尤其是当有人告诉你J...

24250
来自专栏鸿的学习笔记

计算机基础小整理

一、CPU 在平时写的程序可以视为数据和指令的组合体,所有的程序都是copy了一份到内存中才能运行,内存地址是指在内存中保存命令和数据的场所,通过地址来标记和指...

10020
来自专栏PHP在线

URL短链接实现方法

最近项目开发中,需要实现URL长链接转短链接的需求,于是在网上找了一些资料,顺便整理了下,欢迎有想法的童鞋踊跃留言,我们共同探讨。 一.短链接的好处 1.内...

1.3K140
来自专栏熊二哥

单例模式深入理解

最近去平安系面试时,遇到了个人技术领域认定的一大偶像吴大师(Cat作者),他随口问了个单例的问题,要求基于Java技术栈,给出几种单例的方案,并给出单元测试代码...

245100
来自专栏Kevin-ZhangCG

二十三种设计模式总结

定义:Ensure a class has only one instance, and provide a global point of access to...

11820

扫码关注云+社区

领取腾讯云代金券