栈(stack)和堆(heap),

Java程序在运行时都要开辟空间,任何软件在运行时都要在内存中开辟空间,Java虚拟机运行时也是要开辟空间的。JVM运行时在内存中开辟一片内存区域,启动时在自己的内存区域中进行更细致的划分,因为虚拟机中每一片内存处理的方式都不同,所以要单独进行管理。

JVM内存的划分有五片:

1.   寄存器;

2.   本地方法区;

3.   方法区;

4.   栈内存;

5.   堆内存;

栈内存:栈内存首先是一片内存区域,存储的都是局部变量,凡是定义在方法中的都是局部变量(方法外的是全局变量),for循环内部定义的也是局部变量,是先加载函数才能进行局部变量的定义,所以方法先进栈,然后再定义变量,变量有自己的作用域,一旦离开作用域,变量就会被释放。栈内存的更新速度很快,因为局部变量的生命周期都很短;

堆内存:存储的是数组和对象(其实数组就是对象),凡是new建立的都是在堆中,堆中存放的都是实体(对象),实体用于封装数据,而且是封装多个(实体的多个属性),如果一个数据消失,这个实体也没有消失,还可以用,所以堆是不会随时释放的,但是栈不一样,栈里存放的都是单个变量,变量被释放了,那就没有了。堆里的实体虽然不会被释放,但是会被当成垃圾,Java有垃圾回收机制不定时的收取;

二者得关系简单实例:

如果当int [] arr=null;

arr不做任何指向,null的作用就是取消引用数据类型的指向。

当一个实体,没有引用数据类型指向的时候,它在堆内存中不会被释放,而被当做一个垃圾,在不定时的时间内自动回收,因为Java有一个自动回收机制;

堆与栈的区别:

1.栈内存存储的是局部变量而堆内存存储的是实体;

2.栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短;

3.栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收

参考地址:https://blog.csdn.net/jianghao233/article/details/82777789

转载于:https://www.cnblogs.com/wmqiang/p/10608392.html

栈(stack)和堆(heap)相关推荐

  1. 一文搞懂栈(stack)、堆(heap)、单片机裸机内存管理malloc

    大家好,我是无际. 有一周没水文了,俗话说夜路走多了难免遇到鬼. 最近就被一个热心网友喷了. 说我的文章没啥营养,所以今天来一篇烧脑的. 哈哈,开个玩笑,不要脸就没人能把我绑架. 主要是最近研发第二代 ...

  2. 【Objective-C】栈(stack)和堆(heap)的区别

    栈(stack)和堆(heap)的区别: 栈:存储值类型(有时候翻译成"堆栈") 无ARC(自动引用计数)负担,由系统自动管理,以执行函数为单位(一个函数一个栈) 空间大小编译时决 ...

  3. 解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法

    堆区:专门用来保存对象的实例(new 创建的对象和数组),实际上也只是保存对象实例的属性值,属性的类型和对象本身的类型标记等,并不保存对象的方法(方法是指令,保存在Stack中) 1.存储的全部是对象 ...

  4. java中堆栈(stack)和堆(heap)

    http://www.ej38.com/showinfo/java-172156.html 堆栈是一种先进后出的数据结构,只能在一端进行输入或输出数据的操作  Stack类在java.util包中 向 ...

  5. Java里的堆(heap)栈(stack)和方法区(method)

    http://imiduo.iteye.com/blog/616310 Java里的堆(heap)栈(stack)和方法区(method)  <一> 基础数据类型直接在栈空间分配, 方法的 ...

  6. 堆(heap):先进先出,栈(stack)先进后出

    1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取速度比堆要快,仅次于直接位于C ...

  7. java中有没有栈_Java中堆和栈有什么区别

    stack 和 heep 都是内存的一部分stack 空间小,速度比较快, 用来放对象的引用heep 大,一般所有创建的对象都放在这里.栈(stack):是一个先进后出的数据结构,通常用于保存方法(函 ...

  8. java 栈 先进后出_栈先进后出,堆先进先出

    1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取速度比堆要快,仅次于直接位于C ...

  9. java内存堆和栈_java中堆,栈主要区别及内存存储

    java堆.栈.堆栈的区别 1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取速度 ...

最新文章

  1. 迁移学习的魔法:任何人都将能使用深度学习
  2. HTTP 各版本特点与区别
  3. python pdf-浅谈Python处理PDF的方法
  4. BCD码与十进制的相互转换
  5. C#统计字符出现个数
  6. SYBASE数据导入技巧
  7. Spring MVC No converter found for return value of type
  8. 非常详细的 Docker 学习笔记
  9. java面向对象_谈谈Java的面向对象
  10. 《结队-贪吃蛇-项目进度》
  11. 举例说明计算机网络协议,第二章计算机网络协议与体系结构.ppt
  12. 2022年京东新百货七夕礼遇季活动有什么亮点?
  13. 小米 网络位置服务器,小米科普:一文看懂路由器上的 Mesh 组网是什么
  14. 《代码大全》读书笔记之一
  15. split().reverse().join()放一起 好记很多
  16. 用python给说说点赞的人群发新年祝福邮件
  17. LPDDR5 JEDEC
  18. LeetCode : 502. IPO 分析与解答
  19. python元祖用法_Python中元祖的用法
  20. 手机拨号按键歌曲谱子

热门文章

  1. 玩转服务器(华为云)—环境安装(jdk安装,tomcat安装)
  2. pat德才论(java)
  3. Hibernate之对象关系映射文件
  4. Ubuntu 安装 Docker
  5. web.xml、JSP原理、指令
  6. 饼图大小调整_Excel做的双层饼图,太漂亮了
  7. java localhosty_GitHub - yxxxd/sorryJava: 给动图加字幕的sorry项目的java版本
  8. qvector 结构体排序_C++结构体的应用_YCOJ
  9. 阿里云入选 2021 Gartner APM 魔力象限,国内唯一入选云厂商
  10. 重磅 | Dragonfly 晋升成为 CNCF 孵化项目