java的堆和栈_Java 堆和栈的区别
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 堆和栈的区别相关推荐
- java 常量池 和 堆 的关系_Java堆、栈和常量池以及相关String的详细讲解(经典中的经典)...
博客分类: Java综合 一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方--处理器内部.但是寄存器的数量极其有 ...
- java 堆 栈 ===_Java堆,栈,堆栈
栈(stack):是一个先进后出的数据结构,通常用于保存方法(函数)中的参数,局部变量.栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器 在java中,所有基本类型和引用类型都在栈中存储. ...
- java string 栈_Java堆和栈的区别(String类)
堆与栈 Java的堆是一个运行时数据区,对象从中分配空间.这些对象通过new.newarray.anewarray和multianewarray等指令建立,它们不需要程序代码来显式地释放.堆是由垃圾回 ...
- java中的堆空间增加_Java堆内存的10个要点
当我开始学习Java编程时,我不知道什么是堆内存或堆空间,我甚至不知道当对象创建时,它们被放在了哪里.当我开始正式写一些程序后,我会经常遇到java.lang.outOfMemoryError的报错, ...
- java nio 堆外内存_Java堆外内存之突破JVM枷锁
对于有Java开发经验的朋友都知道,Java中不需要手动的申请和释放内存,JVM会自动进行垃圾回收:而使用的内存是由JVM控制的. 那么,什么时机会进行垃圾回收,如何避免过度频繁的垃圾回收?如果JVM ...
- java 堆转储快照_Java堆转储:您可以完成任务吗?
java 堆转储快照 如果您像我一样对Java性能充满热情,那么堆转储分析对您来说应该不是一个谜. 如果是这样,那么好消息是您将有机会增加您的Java故障排除技能和JVM知识. JVM现在已经发展到这 ...
- java 顺序栈_Java实现顺序栈
一.分析 栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表. 顺序栈是指利用顺序存储结构实现 ...
- python全栈和java全栈_Java和全栈开发哪个发展前景好
展开全部 全栈和java哪个能更好62616964757a686964616fe58685e5aeb931333365633839迎合市场需求,有同学咨询学习哪个在以后前景和工作薪水上能更吃香,首先我 ...
- java顺序栈和链栈_Java的顺序栈和链式栈
栈的定义 栈是限制在表的一段进行插入和删除的运算的线性表,通常能够将插入.删除的一端为栈顶,例外一端称为栈底,当表中没有任何元素的时候称为空栈. 通常删除(又称"退栈")叫做弹出p ...
最新文章
- 13本干货书籍,百余篇原创来了
- 书Visual C++.NET应用教程(附光盘)——高等学校计算机语言应用教的评论
- 你知道这些产品设计灵感网站吗?
- C/C++ 语言中的表达式求值
- 我为什么要这么功利?
- SDCC 2016数据库峰会(深圳站)学习笔记
- Java机器学习,第2部分
- python---异常处理结构
- U-boot 打补丁,编译,设置环境变量,
- Qt工作笔记-仿大佬风格代码(使用#ifdef Q_OS_WIN32)
- mysql表的级联操作_mysql表之间的关系及级联操作
- 可以编写html的文件吗,我可以使用HTML5/JS编写文件吗?
- 操作系统—数组的定义和存储结构
- PDF文档转换成mobi格式(for kindle),并解决排版问题
- 最速下降法及案例分析(含MATLAB代码)
- 粒子群算法-讲解+实例
- windows10怎么卸载计算机,win10系统自带浏览器怎么卸载_win10如何卸载电脑自带的浏览器-win7之家...
- 开发一个可以查询并显示数据库内容的微信小程序
- test api mis
- STM32开发 -- RTC详解
热门文章
- bzoj 4451: [Cerc2015]Frightful Formula 数学+排列组合
- 数据库工具使用_plsql篇(PLSQL安装,调试,问题记录不断更新)
- Centos7系统下图形化界面安装以及VNC远程连接教程
- html阴影效果骰子,王权骰铸第一季摩点更新易村点,没关注的小伙伴可以自己看一下...
- 对于CF变态数据分析的一些心得
- 关于Microsoft Windows / Microsoft Office “VLK” 和“MAK”两种激活的异同?
- 应用程序无法正常启动(0xc0000022)。请单击” 确定“关闭应用程序。
- 数据分析实战 205 :项目分析思路 —— 某在线教育机构经营分析
- 常见的安全扫描漏洞的工具、漏洞分类及处理
- 套索回归 (Lasso Regression)的基本应用