一、程序在编译的时候占用的内存分为以下几个部分:

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 的所有线程共享。

堆内存和栈内存的区别相关推荐

  1. 简述JAVA中堆内存与栈内存的区别

    Java把内存划分成两种:一种是栈内存,一种是堆内存. 一.栈内存 存放基本类型的变量,对象的引用和方法调用,遵循先入后出的原则. 栈内存在函数中定义的"一些基本类型的变量和对象的引用变量& ...

  2. java堆内存和栈内存的区别

    一段时间之前,我写了两篇文章文章分别是Java的垃圾回收和Java的值传递,从那之后我收到了很多要求解释Java堆内存和栈内存的邮件,并且要求解释他们的异同点. 在Java中你会看到很多堆和栈内存的引 ...

  3. 栈和堆存储在计算机RAM中,堆内存和栈内存及C++内存分配

    1.现代操作系统内存管理主流的操作系统(Windows,Linux)都采用虚拟内存管理的方式,具体说就是:页式管理.段式管理.段页式管理. 操作系统分配资源的单位是进程,所以,内存管理的过程也是以进程 ...

  4. python变量存储 堆与栈内存内存_浅析JS中的堆内存与栈内存

    最近跟着组里的大佬面试碰到这么一个问题, Q:说说var.let.const的区别 A:balabalabalabla... Q:const定义的值能改么? A:你逗我?不能吧 不知道各位看官怎么想? ...

  5. Java的堆内存和栈内存

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

  6. C++中的堆内存、栈内存和静态内存

    C++中的堆内存.栈内存和静态内存 C++中的空间主要分为三类,堆内存.栈内存和静态内存,其中静态内存用来存储全局对象(定义在任何函数之外的对象).局部static对象.类static数据成员,栈内存 ...

  7. js中的堆内存和栈内存

    转自:https://www.cnblogs.com/heioray/p/9487093.html 浅析JS中的堆内存与栈内存 最近跟着组里的大佬面试碰到这么一个问题, Q:说说var.let.con ...

  8. Java中的堆内存、栈内存和方法区总结

    Java中内存分成两种,一种叫做栈内存,一种叫做堆内存.还有一个方法区,也叫做静态区. 1.栈内存中放哪些东西?  ①基本类型的变量,例如int a=3中的a:  ②对象的引用变量,例如Thread ...

  9. 什么是堆内存和栈内存

    堆内存和栈内存: 概念: 基本数据类型存储在栈内存中 引用数据类型存储在堆内存中 区别: 栈内存:由操作系统自动分配释放 堆内存:一般由程序员手动释放,否则将会由os来回收

  10. c语言栈内存和堆内存大小,堆内存和栈内存及C++内存分配

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 1.现代操作系统内存管理主流的操作系统(Windows,Linux)都采用虚拟内存管理的方式,具体说就是:页式管理.段式 ...

最新文章

  1. redis学习(三) 使用redis构建文章投票,发布后端
  2. java按钮改变窗口大小_布局似乎有问题,JButton在调整窗口大小时显示出意外的行为。...
  3. Maven报错找不到jre
  4. 生成有时间限制的二维码_二维码竟有被用完的一天!看到截止日期后,网友:虚惊一场...
  5. eclipse html tab宽度,Eclipse 设置Tab键为4个空格
  6. Hibernate读书笔记-----Hibernate的关联映射之N-1关联映射
  7. 静态页面放图片及居中
  8. NLP中文句子类型判别和分类实现
  9. 使用 .NET Core 开发 BT Tracker 服务器
  10. 奥克兰计算机科学专业世界排名,2020年新西兰计算机科学专业大学排名
  11. 2014蓝桥杯C++A组——史丰收速算
  12. deprecated注释 原因
  13. 一文搞定BP神经网络——从原理到应用(原理篇)
  14. 不卷了!技术团队成员集体辞职
  15. eNSP不同网段主机互联-static
  16. 1_一些文献中的英文解释和用法整理
  17. 统计学习方法——知识点(1)经验分布
  18. 正点原子Alpha Linux开发板相关资料分享
  19. Unity基础 Unity获取当前时间的时间戳
  20. Pandas各种骚操作

热门文章

  1. 【BZOJ】3613: [Heoi2014]南园满地堆轻絮-贪心
  2. COJ 0358 xjr考考你数据结构(根号3)线段树区间修改
  3. idea无法切换成中文
  4. 评测 AlibabaCloud 阿里云国际版 香港轻量云服务器的性能和网络怎么样
  5. RabbitMQ基础
  6. 第十四周 项目一 二叉排序树
  7. xp计算机连接不上网络打印机驱动,windows xp系统打印机共享提示连接失败的解决方法...
  8. css同时多个立方体旋转,CSS3 旋转立方体问题详解
  9. Tara APP隐私政策
  10. 隐含马尔可夫 隐含状态_隐含可读性