java中堆和栈有什么区别?

作者 : 开心源码 本文共683个字,预计阅读时间需要2分钟 发布时间: 2022-05-12 共173人阅读

堆和栈都是Java用来在RAM中存放数据的地方。

一、堆

(1)Java的堆是一个运行时数据区,类的对象从堆中分配空间。这些对象通过new等指令建立,通过垃圾回收器来销毁。

(2)堆的优势是可以动态地分配内存空间,需要多少内存空间不必事前告诉编译器,由于它是在运行时动态分配的。但缺点是,因为需要在运行时动态分配内存,所以存取速度较慢。

二、栈

(1)栈中主要存放少量基本数据类型的变量(byte,short,int,long,float,double,boolean,char)和对象的引用。

(2)栈的优势是,存取速度比堆快,栈数据可以共享。但缺点是,存放在栈中的数据占用多少内存空间需要在编译时确定下来,缺乏灵活性。

三、举例说明栈数据可以共享

String 可以用以下两种方式来创立:

第一种使用new来创立的对象,它存放在堆中。每调用一次就创立一个新的对象。

第二种是先在栈中创立对象的引用str2,而后查找栈中有没有存放“abc”,假如没有,则将“abc”存放进栈,并将str2指向“abc”,假如已经有“abc”, 则直接将str2指向“abc”。

下面用代码说明上面的理论:

输出结果为:false

输出结果为:true

因而,用第二种方式创立多个“abc”字符串,在内存中其实只存在一个对象而已,?这种写法有利于节省内存空间。

同时还可以提高程序的运行速度,由于JVM会自动根据栈中数据的实际情况来决定能否创立新对象。

?为了让学习变得轻松、高效,今天给大家免费分享一套Java教学资源。帮助大家在成为Java架构师的道路上披荆斩棘。需要资料的欢迎加入学习交流群:9285,05736

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » java中堆和栈有什么区别?

发表回复