作者:nnngu地址:https://www.cnblogs.com/nnngu/p/8300761.html
堆和栈都是Java用来在RAM中存放数据的地方。堆1)Java的堆是一个运行时数据区,类的对象从堆中分配空间。这些对象通过new等指令建立,通过垃圾回收器来销毁。
2)堆的优势是可以动态地分配内存空间,需要多少内存空间不必事先告诉编译器,因为它是在运行时动态分配的。但缺点是,由于需要在运行时动态分配内存,所以存取速度较慢。
栈1)栈中主要存放一些基本数据类型的变量(byte,short,int,long,float,double,boolean,char)和对象的引用。
2)栈的优势是,存取速度比堆快,栈数据可以共享。但缺点是,存放在栈中的数据占用多少内存空间需要在编译时确定下来,缺乏灵活性。
举例说明栈数据可以共享String 可以用以下两种方式来创建:
String str1 = new String("abc");
String str2 = "abc";
第一种使用new来创建的对象,它存放在堆中。每调用一次就创建一个新的对象。
第二种是先在栈中创建对象的引用str2,然后查找栈中有没有存放“abc”,如果没有,则将“abc”存放进栈,并将str2指向“abc”,如果已经有“abc”, 则直接将str2指向“abc”。
下面用代码说明上面的理论:
public static void main(String\[\] args) {String str1 = new String("abc");String str2 = new String("abc");System.out.println(str1 == str2);
}
输出结果为:false
public static void main(String\[\] args) {String str1 = "abc";String str2 = "abc";System.out.println(str1 == str2);
}
输出结果为:true
因此,用第二种方式创建多个“abc”字符串,在内存中其实只存在一个对象而已。这种写法有利于节省内存空间。同时还可以提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否创建新对象。

关微信公众号:互联网架构师,在后台回复:2T,可以获取我整理的教程,都是干货。

猜你喜欢

1、GitHub 标星 3.2w!史上最全技术人员面试手册!FackBoo发起和总结

2、如何才能成为优秀的架构师?

3、从零开始搭建创业公司后台技术栈

4、程序员一般可以从什么平台接私活?

5、37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...

6、滴滴业务中台构建实践,首次曝光

7、不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事

8、15张图看懂瞎忙和高效的区别

9、2T架构师学习资料干货分享

Java 堆和栈的区别,还傻傻分不清?相关推荐

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

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

  2. Java:堆和栈的区别

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

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

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

  4. Java堆和栈的区别

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

  5. Java 堆和栈的区别

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

  6. java 堆与栈的区别

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

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

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

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

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

  9. Java堆和栈的基本理解

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

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

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

最新文章

  1. Exception in thread main java.lang.Error: 无法解析的编译问题: 方法 main 不能声明为 static;只能在静态类型或顶级类型中才能声明静态方法
  2. iOS开发网络篇—NSURLConnection基本使用(一)
  3. 磁盘阵列的创建与管理
  4. 自动化运维工具SaltStack详细部署
  5. 实现自己的.NET Core配置Provider之Yaml
  6. python2 安装 pip
  7. 那个说技术本身并不可耻的快播王欣回来了!
  8. FOSRestBundle功能包:概述
  9. 土地利用转移矩阵图怎么做_如何用Arcgis做土地利用转移矩阵?求教各位..._土地估价师_帮考网...
  10. 数组和集合的区别及定义方式
  11. linux文件系统与磁盘(五)分区的取消挂载、调整分区大小
  12. 博网即时通讯软件的设计与实现(附源码+课件+数据库+资料)
  13. ant design vue 中a-tree搜索查询
  14. Aspose 只更新页码和 更新域 UpdatePageNumbers
  15. Python中的long类型
  16. java开发wap_C#开发WAP程序
  17. 如何利用GPT来发论文!!
  18. 2022年大数据产业规模已超1000亿,从ChatGPT的爆火看大数据行业发展
  19. Linux文本处理三剑客
  20. 基于51单片机的多点温度火灾报警自动灭火系统(实物图+源码+原理图+全套资料)

热门文章

  1. Maven构建springBoot Demo案例
  2. 原生JS大揭秘—事件循环机制Event Loop
  3. SVN的学习和使用(七)——SVN提交操作
  4. 链路负载需求及基本原理
  5. linux DNS 简单配置
  6. Android开发学习笔记:数据存取之File浅析
  7. 曙光:卖市场上没有的产品
  8. Illustrator中文版教程,如何在AI中以不同的方式组合形状?
  9. Pr 入门教程,如何隔离颜色?
  10. M1升级MacOS Monterey后,如何使用空间音频?