1、概述

在Java中,内存分为两种,一种是栈内存,另一种就是堆内存。

2、堆内存

1.什么是堆内存?

1

堆内存是是Java内存中的一种,它的作用是用于存储Java中的对象和数组,当我们new一个对象或者创建一个数组的时候,就会在堆内存中开辟一段空间给它,用于存放。

2.堆内存的特点是什么?

1

第一点:堆其实可以类似的看做是管道,或者说是平时去排队买票的的情况差不多,所以堆内存的特点就是:先进先出,后进后出,也就是你先排队,好,你先买票。

第二点:堆可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,但缺点是,由于要在运行时动态分配内存,存取速度较慢。

3.new对象在堆中如何分配?

1

由Java虚拟机的自动垃圾回收器来管理

3、栈内存

1.什么是栈内存

1

栈内存是Java的另一种内存,主要是用来执行程序用的,比如:基本类型的变量和对象的引用变量

2.栈内存的特点

1

第一点:栈内存就好像一个矿泉水瓶,像里面放入东西,那么先放入的沉入底部,所以它的特点是:先进后出,后进先出

第二点:存取速度比堆要快,仅次于寄存器,栈数据可以共享,但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性

3.栈内存分配机制

1

栈内存可以称为一级缓存,由垃圾回收器自动回收

4.数据共享

1

例子:

int a = 3;

int b = 3;

第一步处理:

1

1.编译器先处理int a = 3;

2.创建变量a的引用

3.在栈中查找是否有3这个值

4.没有找到,将3存放,a指向3

第二步处理:

1

1.处理b=3

2.创建变量b的引用

3.找到,直接赋值

第三步改变:

1

接下来

a = 4;

同上方法

a的值改变,a指向4,b的值是不会发生改变的

PS:如果是两个对象的话,那就不一样了,对象指向的是同一个引用,一个发生改变,另一个也会发生改变

4、栈和堆的区别

JVM是基于堆栈的虚拟机.JVM为每个新创建的线程都分配一个堆栈.也就是说,对于一个Java程序来说,它的运行就是通过对堆栈的操作来完成的。堆栈以帧为单位保存线程的状态。JVM对堆栈只进行两种操作:以帧为单位的压栈和出栈操作。

差异

1

1.堆内存用来存放由new创建的对象和数组。

2.栈内存用来存放方法或者局部变量等

3.堆是先进先出,后进后出

4.栈是后进先出,先进后出

相同

1

1.都是属于Java内存的一种

2.系统都会自动去回收它,但是对于堆内存一般开发人员会自动回收它

---------------------

作者:曾淘

来源:CSDN

原文:https://blog.csdn.net/u011546655/article/details/52170470?utm_source=copy

版权声明:本文为博主原创文章,转载请附上博文链接!

java的堆和栈_Java 堆和栈的区别相关推荐

  1. java 常量池 和 堆 的关系_Java堆、栈和常量池以及相关String的详细讲解(经典中的经典)...

    博客分类: Java综合 一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方--处理器内部.但是寄存器的数量极其有 ...

  2. java 堆 栈 ===_Java堆,栈,堆栈

    栈(stack):是一个先进后出的数据结构,通常用于保存方法(函数)中的参数,局部变量.栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器 在java中,所有基本类型和引用类型都在栈中存储. ...

  3. java string 栈_Java堆和栈的区别(String类)

    堆与栈 Java的堆是一个运行时数据区,对象从中分配空间.这些对象通过new.newarray.anewarray和multianewarray等指令建立,它们不需要程序代码来显式地释放.堆是由垃圾回 ...

  4. java中的堆空间增加_Java堆内存的10个要点

    当我开始学习Java编程时,我不知道什么是堆内存或堆空间,我甚至不知道当对象创建时,它们被放在了哪里.当我开始正式写一些程序后,我会经常遇到java.lang.outOfMemoryError的报错, ...

  5. java nio 堆外内存_Java堆外内存之突破JVM枷锁

    对于有Java开发经验的朋友都知道,Java中不需要手动的申请和释放内存,JVM会自动进行垃圾回收:而使用的内存是由JVM控制的. 那么,什么时机会进行垃圾回收,如何避免过度频繁的垃圾回收?如果JVM ...

  6. java 堆转储快照_Java堆转储:您可以完成任务吗?

    java 堆转储快照 如果您像我一样对Java性能充满热情,那么堆转储分析对您来说应该不是一个谜. 如果是这样,那么好消息是您将有机会增加您的Java故障排除技能和JVM知识. JVM现在已经发展到这 ...

  7. java 顺序栈_Java实现顺序栈

    一.分析 栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表. 顺序栈是指利用顺序存储结构实现 ...

  8. python全栈和java全栈_Java和全栈开发哪个发展前景好

    展开全部 全栈和java哪个能更好62616964757a686964616fe58685e5aeb931333365633839迎合市场需求,有同学咨询学习哪个在以后前景和工作薪水上能更吃香,首先我 ...

  9. java顺序栈和链栈_Java的顺序栈和链式栈

    栈的定义 栈是限制在表的一段进行插入和删除的运算的线性表,通常能够将插入.删除的一端为栈顶,例外一端称为栈底,当表中没有任何元素的时候称为空栈. 通常删除(又称"退栈")叫做弹出p ...

最新文章

  1. 13本干货书籍,百余篇原创来了
  2. 书Visual C++.NET应用教程(附光盘)——高等学校计算机语言应用教的评论
  3. 你知道这些产品设计灵感网站吗?
  4. C/C++ 语言中的表达式求值
  5. 我为什么要这么功利?
  6. SDCC 2016数据库峰会(深圳站)学习笔记
  7. Java机器学习,第2部分
  8. python---异常处理结构
  9. U-boot 打补丁,编译,设置环境变量,
  10. Qt工作笔记-仿大佬风格代码(使用#ifdef Q_OS_WIN32)
  11. mysql表的级联操作_mysql表之间的关系及级联操作
  12. 可以编写html的文件吗,我可以使用HTML5/JS编写文件吗?
  13. 操作系统—数组的定义和存储结构
  14. PDF文档转换成mobi格式(for kindle),并解决排版问题
  15. 最速下降法及案例分析(含MATLAB代码)
  16. 粒子群算法-讲解+实例
  17. windows10怎么卸载计算机,win10系统自带浏览器怎么卸载_win10如何卸载电脑自带的浏览器-win7之家...
  18. 开发一个可以查询并显示数据库内容的微信小程序
  19. test api mis
  20. STM32开发 -- RTC详解

热门文章

  1. bzoj 4451: [Cerc2015]Frightful Formula 数学+排列组合
  2. 数据库工具使用_plsql篇(PLSQL安装,调试,问题记录不断更新)
  3. Centos7系统下图形化界面安装以及VNC远程连接教程
  4. html阴影效果骰子,王权骰铸第一季摩点更新易村点,没关注的小伙伴可以自己看一下...
  5. 对于CF变态数据分析的一些心得
  6. 关于Microsoft Windows / Microsoft Office “VLK” 和“MAK”两种激活的异同?
  7. 应用程序无法正常启动(0xc0000022)。请单击” 确定“关闭应用程序。
  8. 数据分析实战 205 :项目分析思路 —— 某在线教育机构经营分析
  9. 常见的安全扫描漏洞的工具、漏洞分类及处理
  10. 套索回归 (Lasso Regression)的基本应用