JAVA 堆和栈的区别

来源:互联网 发布:怎么取消淘宝介入 编辑:程序博客网 时间:2024/06/06 09:20

1、概述

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

2、堆内存

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

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

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

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

3.new对象在堆中如何分配?
由Java虚拟机的自动垃圾回收器来管理


3、栈内存

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

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

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

3.栈内存分配机制
栈内存可以称为一级缓存,由垃圾回收器自动回收
4.数据共享

例子: 
int a = 3; 
int b = 3;

第一步处理:
1.编译器先处理int a = 3; 
2.创建变量a的引用 
3.在栈中查找是否有3这个值 
4.没有找到,将3存放,a指向3

第二步处理:

1.处理b=3 
2.创建变量b的引用 
3.找到,直接赋值
第三步改变:

接下来 a = 4; 同上方法 a的值改变,a指向4,b的值是不会发生改变的

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

4、栈和堆的区别

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


差异

1.堆内存用来存放由new创建的对象和数组。 
2.栈内存用来存放方法或者局部变量等 
3.堆是先进先出,后进后出 
4.栈是后进先出,先进后出

相同


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





阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 重阳子 采桑子 重阳译文 采桑子 重阳 采桑子 重阳 赏析 采桑子 重阳 译文 采桑子 重阳全诗 神皇之子霍雨浩重临 采桑子 重阳 古诗 重孝 咸丰重宝当十宝泉局价格 咸丰重宝当十宝泉局 咸丰重宝当五十宝源局 咸丰重宝当十宝泉局价多少 宝泉局咸丰重宝 宝泉局咸丰重宝当十价格 妖怪人间维和局 孤重染 重岩 重岩叠嶂的意思 重岩叠嶂的嶂 快穿重回颠峰 登峰鲤鱼竿钓重 超能重工 雷沃重工 重工帝国 重工 山东重工 铁建重工 天能重工 大连重工 大国重工txt 北方重工 吉业重工 江山重工 中囯重工 中国重工吧 中信重工股票 山东重工集团 中国铁建重工集团 中国铁建重工集团有限公司 中国重工今日走势 中国重工股票行情