堆内存和栈内存的区别
一、程序在编译的时候占用的内存分为以下几个部分:
1 、栈区( stack )— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限.
2 、堆区( heap )— 亦称动态内存分配.程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在适当的时候用free或delete释放内存。动态内存的生存期可以由我们决定,如果我们不释放内存,程序将在最后才释放掉动态内存.但是,良好的编程习惯是:如果某动态内存不再使用,需要将其释放掉,否则,我们认为发生了内存泄漏现象。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表.
3 、全局区(静态区)( static )— 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由有系统释放.
4 、常量区 — 常量字符串就是放在这里的.程序结束后由系统释放.
5 、程序代码区 — 存放函数体的二进制代码.
1、栈内存用来存放基本类型的变了和引用变量,堆内存用来存储java中的对象,无论是成员变量,局部变量,还是类变量,他们指向的对象都存储在堆内存中。
2、栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属的线程中可见,即栈内存可以理解成线程的私有内存;堆内存中的对象对所有线程可见。堆内存中的对象可以被所有线程访问。
3、如果栈内存没有可用的空间存储方法调用和局部变量,JVM会抛出java.lang.stackoverflowerror 错误;如果是堆内存内有可用的空间存储生成的对象,jvm会抛出java.lang.outofmemoryerror错误。
3、栈的内存要远远小于堆内存,如果你使用递归的话,那么你的栈会很快充满。-Xss设置每个线程堆栈内存的大小 -Xms可以设置堆内存开始时的大小。
简单总结如下:
JVM 中堆和栈属于不同的内存区域,使用目的也不同。栈常用于保存方法帧和局部变量,而对象总是在堆上分配。栈通常都比堆小,也不会在多个线程之间共享,而堆被整个 JVM 的所有线程共享。
堆内存和栈内存的区别相关推荐
- 简述JAVA中堆内存与栈内存的区别
Java把内存划分成两种:一种是栈内存,一种是堆内存. 一.栈内存 存放基本类型的变量,对象的引用和方法调用,遵循先入后出的原则. 栈内存在函数中定义的"一些基本类型的变量和对象的引用变量& ...
- java堆内存和栈内存的区别
一段时间之前,我写了两篇文章文章分别是Java的垃圾回收和Java的值传递,从那之后我收到了很多要求解释Java堆内存和栈内存的邮件,并且要求解释他们的异同点. 在Java中你会看到很多堆和栈内存的引 ...
- 栈和堆存储在计算机RAM中,堆内存和栈内存及C++内存分配
1.现代操作系统内存管理主流的操作系统(Windows,Linux)都采用虚拟内存管理的方式,具体说就是:页式管理.段式管理.段页式管理. 操作系统分配资源的单位是进程,所以,内存管理的过程也是以进程 ...
- python变量存储 堆与栈内存内存_浅析JS中的堆内存与栈内存
最近跟着组里的大佬面试碰到这么一个问题, Q:说说var.let.const的区别 A:balabalabalabla... Q:const定义的值能改么? A:你逗我?不能吧 不知道各位看官怎么想? ...
- Java的堆内存和栈内存
一.Java的堆内存和栈内存 Java把内存划分成两种:一种是堆内存,一种是栈内存. 堆:主要用于存储实例化的对象,数组.由JVM动态分配内存空间.一个JVM只有一个堆内存,线程是可以共享数据的. 栈 ...
- C++中的堆内存、栈内存和静态内存
C++中的堆内存.栈内存和静态内存 C++中的空间主要分为三类,堆内存.栈内存和静态内存,其中静态内存用来存储全局对象(定义在任何函数之外的对象).局部static对象.类static数据成员,栈内存 ...
- js中的堆内存和栈内存
转自:https://www.cnblogs.com/heioray/p/9487093.html 浅析JS中的堆内存与栈内存 最近跟着组里的大佬面试碰到这么一个问题, Q:说说var.let.con ...
- Java中的堆内存、栈内存和方法区总结
Java中内存分成两种,一种叫做栈内存,一种叫做堆内存.还有一个方法区,也叫做静态区. 1.栈内存中放哪些东西? ①基本类型的变量,例如int a=3中的a: ②对象的引用变量,例如Thread ...
- 什么是堆内存和栈内存
堆内存和栈内存: 概念: 基本数据类型存储在栈内存中 引用数据类型存储在堆内存中 区别: 栈内存:由操作系统自动分配释放 堆内存:一般由程序员手动释放,否则将会由os来回收
- c语言栈内存和堆内存大小,堆内存和栈内存及C++内存分配
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 1.现代操作系统内存管理主流的操作系统(Windows,Linux)都采用虚拟内存管理的方式,具体说就是:页式管理.段式 ...
最新文章
- redis学习(三) 使用redis构建文章投票,发布后端
- java按钮改变窗口大小_布局似乎有问题,JButton在调整窗口大小时显示出意外的行为。...
- Maven报错找不到jre
- 生成有时间限制的二维码_二维码竟有被用完的一天!看到截止日期后,网友:虚惊一场...
- eclipse html tab宽度,Eclipse 设置Tab键为4个空格
- Hibernate读书笔记-----Hibernate的关联映射之N-1关联映射
- 静态页面放图片及居中
- NLP中文句子类型判别和分类实现
- 使用 .NET Core 开发 BT Tracker 服务器
- 奥克兰计算机科学专业世界排名,2020年新西兰计算机科学专业大学排名
- 2014蓝桥杯C++A组——史丰收速算
- deprecated注释 原因
- 一文搞定BP神经网络——从原理到应用(原理篇)
- 不卷了!技术团队成员集体辞职
- eNSP不同网段主机互联-static
- 1_一些文献中的英文解释和用法整理
- 统计学习方法——知识点(1)经验分布
- 正点原子Alpha Linux开发板相关资料分享
- Unity基础 Unity获取当前时间的时间戳
- Pandas各种骚操作
热门文章
- 【BZOJ】3613: [Heoi2014]南园满地堆轻絮-贪心
- COJ 0358 xjr考考你数据结构(根号3)线段树区间修改
- idea无法切换成中文
- 评测 AlibabaCloud 阿里云国际版 香港轻量云服务器的性能和网络怎么样
- RabbitMQ基础
- 第十四周 项目一 二叉排序树
- xp计算机连接不上网络打印机驱动,windows xp系统打印机共享提示连接失败的解决方法...
- css同时多个立方体旋转,CSS3 旋转立方体问题详解
- Tara APP隐私政策
- 隐含马尔可夫 隐含状态_隐含可读性