一、栈

栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈数据可以共享。

那些数据存放在栈中?

基本数据类型(int, short, long, byte, float, double, boolean, char)的变量存放于栈中。

对象的引用存放于栈中。

栈数据共享具体指什么意思?(方法区中的常量池)

int a = 3; int b = 3;

编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找有没有字面值为3的地址,没找到,就开辟一个存放3这个字面值的地址,然后将a指向3的地址。接着处理int b = 3;在创建完b的引用变量后,由于在栈中已经有3这个字面值,便将b直接指向3的地址。这样,就出现了a与b同时均指向3的情况。即共享了3这个栈数据。

另外,比较特殊的是String,虽然String类型不是简单的基本数据类型,但是当用String a="abc"这样的语法定义String变量的时候,会把数据存储在栈中,因此也会有上面所说的数据共享特性。

java的八种基本类型(Byte Short、Integer、Long、Character、Boolean、Float、Double),除Float及Double意外,其它六种都实现了常量池,但是他们只在大于等于-128且小于等于127时才能使用常量池,如果不在此范围内,则会new一个出来,保存在堆内存中。

二、堆

堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器。堆数据在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。但缺点是,由于要在运行时动态分配内存,存取速度较慢。

那些数据存放在堆中?

堆内存用于存放由new创建的对象和数组,即堆主要是用来存储对象的。Java中所有对象的存储空间都是在堆中分配的,但是这个对象的引用却是在堆栈中分配,也就是说在建立一个对象时从两个地方都分配内存,在堆中分配的内存实际建立这个对象,而在堆栈中分配的内存只是一个指向这个堆对象的指针(引用)而已。

三、方法区中的静态存储区

存储static声明的静态变量

java 静态存储区_Java中的堆内存、栈内存、静态存储区相关推荐

  1. 什么是java中的栈和堆_java中的堆和栈是什么?堆和栈有什么区别?

    java中的堆和栈是什么?堆和栈有什么区别? 发布时间:2020-06-02 11:51:19 来源:亿速云 阅读:183 作者:Leah java中的堆和栈是什么?堆和栈有什么区别?这些问题可能是我 ...

  2. 【C语言进阶深度学习记录】三十五 程序中的堆、栈以及静态存储区(数据区)

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 在我之前学习底层的知识的时候,也写过相关的内容.可以对比的学习:[软 ...

  3. C/C++内存分配、内存区划分、常量存储区、堆、栈、自由存储区、全局区(静态区)、代码区

    C/C++内存分配.内存区划分.常量存储区.堆.栈.自由存储区.全局区 C++中,内存分成几个区: 栈(stack) 堆(heap) 自由存储区 全局/静态存储区 常量存储区 代码区 对于C++的内存 ...

  4. C++ 堆、栈、自由存储区、全局静态存储区和常量存储区

    文章来自一个论坛里的回帖,哪个论坛记不得了!    在C++中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区.     栈,就是那些由编译器在需要的时候分配,在不需要的时 ...

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

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

  6. 内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理]...

    这可以帮助你深入了解程序的运行机制,由于自己还是一个初学者,因此大部分内容都只是转载. http://blog.sina.com.cn/s/blog_7edcf63b0100yhk9.html 一. ...

  7. 内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理][转载]...

    http://www.cnblogs.com/JCSU/articles/1051579.html 一. 在c中分为这几个存储区 1.栈 - 由编译器自动分配释放 2.堆 - 一般由程序员分配释放,若 ...

  8. java 堆和栈 数据结构_数据结构的栈和堆和程序中的堆和栈

    在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到.但对于很多的初学着来说,堆栈是一个很模糊的概念.堆栈:一种数据结构.一个在程序运行时用于存放的地方,这可能是很多初学者的认识 ...

  9. java继承对象转换_java中类与对象的继承重写,存储以及自动转换和强制转换。...

    对象的继承 继承关键字:extends 继承的格式: public class 类名 extends 父类名{ } 注:一个类只能继承一个父类.子类继承父类的全部内容. 访问修饰符同类中 同包中 不同 ...

  10. Java中的堆和栈的区别

    当一个人开始学习Java或者其他编程语言的时候,会接触到堆和栈,由于一开始没有明确清晰的说明解释,很多人会产生很多疑问,什么是堆,什么是栈,堆和栈有什么区别?更糟糕的是,Java中存在栈这样一个后进先 ...

最新文章

  1. ARKIT/ARCore对比分析(二)
  2. android 图片横竖判断_Android横竖屏切换及其对应布局加载问题详解
  3. Android Keystore/keymaster的错误码
  4. Maven问题总结 - 2
  5. bootstarp js设置列隐藏_bootstrap table getHiddenColumns获取隐藏的列的方法
  6. render注册一个链接组件_vue: 单文件组件 render函数
  7. oracle中表空间实例,oracle的表空间实例详解
  8. IHttphandler之“验证码”服务器控件
  9. 互联网金融业务中的风控
  10. Dubbo 快速入门教程
  11. 小米路由2+安装+php,小米路由器作为二级路由,完美使用APP和文件共享
  12. 使用过滤器解决中文乱码问题
  13. java tuscany_Apache Tuscany Java 1.1发布
  14. c# Monitor
  15. 完美日记母公司逸仙电商将收购护肤品牌Eve Lom
  16. 独立站SaaS建站模式是什么
  17. 华为手机虚拟键盘遮挡菜单
  18. python中的ascii码是啥_python ascii码到u
  19. STM32之数据采集和心率检测仪(原理图、PCB、程序源码等)超详细!!!
  20. 用Python量化海龟交易法则

热门文章

  1. 在Win7中IIS配置Asp.Net虚拟文件夹的方法及错误总结!
  2. 嵌入式根文件系统的移植和制作详解【转】
  3. MonoCSharp Evaluator Extension
  4. 体验MSN聚酷(Juku)
  5. python lxml_python – lxml使用命名空间而不是ns0,ns1,
  6. mysql同步row模式_mysql行模式(ROW)主从同步测试及错误修复
  7. pyqt5获取文本框里输入的值_【技术指南】 使用MCC数据采集设备获取单通道模拟输入值...
  8. html怎么实现追加表格,jQuery实现html表格动态添加新行的方法
  9. IE7、IE8、IE9、IE10后各版本的更新及差别
  10. 基于MongoDB与NodeJS构建物联网系统