1、概述

在Java中,内存分为两种,一种是堆内存,另一种就是栈内存。

2、堆内存

1.什么是堆内存?

 

堆内存是Java内存中的一种,它的作用是用于存储Java中的对象和数组,当我们new一个对象或者创建一个数组的时候,就会在堆内存中开辟一段空间给它,用于存放。

2.堆内存的特点是什么?

第一点:堆其实可以类似的看做是管道,或者可以比喻成去排队买票,所以堆内存的特点就是:先进先出,后进后出,也就是你先排队,你就可以先买到票。

第二点:堆可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,但缺点是,由于要在运行时动态分配内存,存取速度较慢。

3.new对象在堆中如何分配?

由Java虚拟机的自动垃圾回收器来管理

3、栈内存

1.什么是栈内存

栈内存是Java的另一种内存,主要是用来执行程序用的,比如:基本类型的变量和对象的引用变量。

2.栈内存的特点

第一点:栈内存就好像一个矿泉水瓶,向里面放入东西,那么先放入的沉入底部,所以它的特点是:先进后出,后进先出

第二点:存取速度比堆要快,仅次于寄存器,栈数据可以共享,但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。

3.栈内存分配机制

栈内存可以称为一级缓存,由垃圾回收器自动回收

4.数据共享

例子: 
int a = 3; 
int b = 3;

第一步处理:

1.编译器先处理int a = 3; 
2.创建变量a的引用 
3.在栈中查找是否有3这个值 
4.没有找到,将3存放,a指向3

第二步处理:

1.处理b=3 
2.创建变量b的引用 
3.找到,直接赋值

第三步改变:

接下来 
a = 4; 
同上方法 
a的值改变,a指向4,b的值是不会发生改变的

PS:如果是两个对象的话,那就不一样了,对象指向的是同一个引用,一个发生改变,另一个也会发生改变

4、栈和堆的区别

JVM是基于堆栈的虚拟机.JVM为每个新创建的线程都分配一个堆栈,也就是说,对于一个Java程序来说,它的运行就是通过对堆栈的操作来完成的。堆栈以帧为单位保存线程的状态。JVM对堆栈只进行两种操作:以帧为单位的压栈和出栈操作。

差异

1.堆内存用来存放由new创建的对象和数组。 
2.栈内存用来存放方法或者局部变量等 
3.堆是先进先出,后进后出 
4.栈是后进先出,先进后出

相同

1.都是属于Java内存的一种 
2.系统都会自动去回收它,但是对于堆内存一般开发人员会自动回收它

转载于:https://www.cnblogs.com/autobyme/p/8384166.html

Java堆和栈的区别相关推荐

  1. Java:堆和栈的区别

    文章目录 前言 一.Java堆栈常见问题 二.问题理解 1.为什么要区分堆和栈 静态分配 动态分配 Java中的堆 2.堆和栈的区别 3.为什么堆是线程共享的而栈不是? 4.我们平时说的堆栈信息.堆栈 ...

  2. Java堆和栈的区别/联系详解

    Java堆和栈的区别/联系详解 关于Java中堆栈内存的知识,算是基础知识,和C语言中的指针有一些类似,面试中也经常会被问到,特别是跟Java和C都有关的开发工作. 一.堆栈的联系 在Java中,内存 ...

  3. java堆和栈的区别_JAVA中堆和栈的区别

    在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配. 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配 ...

  4. Java 堆和栈的区别

    1.概述 在Java中,内存分为两种,一种是栈内存,另一种就是堆内存. 2.堆内存 1.什么是堆内存? 堆内存是是Java内存中的一种,它的作用是用于存储Java中的对象和数组,当我们new一个对象或 ...

  5. java 堆与栈的区别

    2019独角兽企业重金招聘Python工程师标准>>> 一直对这两个概念比较模糊,心里不安,所以下决心好好的看了一下它. 它们都是计算机中的数据结构. 堆(heap):把堆比作一个大 ...

  6. 经典面试题-java堆和栈的区别

    Java栈是与每一个线程关联的,JVM在创建每一个线程的时候,会分配一定的栈空间给线程,主要存放线程执行过程中的局部变量,方法的返回值,基本类型的变量(,int, short, long, byte, ...

  7. JAVA中堆和栈的区别和联系

    一.Java的堆内存和栈内存 Java把内存划分成两种:一种是堆内存,一种是栈内存. 堆:主要用于储存实例化的对象,数组.由JVM动态分配内存空间.一个JVM只有一个堆内存,线程是可以共享数据的. 栈 ...

  8. Java堆和栈的基本理解

    Java 堆和栈的区别 参考背景: 堆内存:用来存放由new创建的对象和数组: 栈内存:存放基本类型的变量,对象的引用变量: 堆存放的原因:由于在堆中创建对象(或数组)后,可在栈中定义一个特殊变量,让 ...

  9. 程序的内存分配之堆和栈的区别

    堆栈概述   在计算机领域,堆栈是一个不容忽视的概念,堆栈是两种数据结构.堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除.在单片机应用中,堆栈是个特殊的存 ...

最新文章

  1. 人类史上最伟大的 PPT,马斯克的 39 页火星计划PPT
  2. LESSON 12.8 原理进阶 (1):GBDT数学流程与残差概念辨析
  3. 操作系统 课堂练习题02【8道 经典题目】
  4. Win32 多文档多视图
  5. 从0到1打造一款react-native App(二)Navigation+Redux
  6. Mac下mysql登陆问题
  7. Java线程之Callable和Future
  8. SONATYPE NEXUS搭建MAVEN私服
  9. 中级系统集成项目管理工程师考试记录之总述
  10. 聊一聊云电脑、云游戏以及阿里云的“无影”
  11. 制作放射冲击星空粒子海报图片的PS教程
  12. 三只松鼠3次方新品魅力何在?
  13. 【计算机图形学】c++ OpenGL 二维变换(包括多边形绘制、平移、旋转及缩放)
  14. 消费者洞察:数据影响消费,消费营造数据
  15. 基于微信小程序的RSS订阅器
  16. 木子-前端-方法标签属性小记(普通jsp/html篇)2018
  17. 全球化观点的生产模式
  18. 矩阵中的代数重数与几何重数——课程笔记
  19. 聊聊小程序的登录逻辑
  20. 【无标题】鸿蒙培训1

热门文章

  1. Android Gradle Plugin 源码阅读与编译
  2. 浅谈android hook技术
  3. 三个案例带你看懂LayoutInflater中inflate方法两个参数和三个参数的区别
  4. pb 应用 迁移 linux_功能化生物炭应用研究取得系列进展
  5. JZOJ 5637. 【NOI2018模拟4.8】一双木棋
  6. android excel 筛选功能,Android实现Excel表格展示数据
  7. 下列符合c语言语法的字符常量是,C语言程序设计(周经亚)选择题练习-chapter 5.doc...
  8. java获取当前周一_Java互联网架构-Spring IOC源码分析
  9. java调用python项目实战_Java调用Python
  10. sierra mysql_macOS High Sierra 使用 Homebrew 安装 MYSQL 5.7