温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java栈与堆是什么

发布时间:2022-01-06 15:52:19 来源:亿速云 阅读:162 作者:iii 栏目:大数据

本篇内容介绍了“java栈与堆是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

所有的java程序在运行时,都要在内存中开辟一个空间,并且在JVM(java虚拟机)运行的时候,会分得更加的细致,虚拟机中每一片内存的处理方式都是不一样的,所以需要进行单独的管理。

JVM的内存一共分为5种:

寄存器,本地方法区,方法区,堆内存,栈内存

今天我们主要讲堆内存与栈内存。

栈内存

栈内存主要储存的是局部变量,也就是说,是定义在方法之内的,都叫局部变量。线程执行的时候调用方法的内存模型,当方法执行的时候,会创建一个叫“栈帧”的内存结构,栈帧会储存该方法内用到的局部变量表,操作数栈、返回地址、动态连接等信息。(这里新手主要了解局部变量表与返回地址就好了,局部变量表顾名思义是用来储存局部变量的,方法返回地址,是指方法在运行过程中,可能会正常退出,也可能会异常退出,但是不管哪种退出方式,都要让调用者知道方法退出的位置,方法返回地址就是用来确定退出位置的。)一个方法从方法被调用开始,到方法执行结束,就是一个栈帧在java栈中从入栈到出栈的全过程。

堆内存

堆内存储存的是对象,也就是new出来的都在堆里,堆中存放的都是实体(对象),实体用于封装数据,而且是封装多个(实体的多个属性),如果一个数据消失,这个实体也没有消失,还可以用,所以堆是不会随时释放的,但是栈不一样,栈里存放的都是单个变量,变量被释放了,那就没有了。堆里的实体虽然不会被释放,但是会被当成垃圾,Java有垃圾回收机制不定时的收取。

通俗一点说堆和栈的区别:堆主要用来存放对象的,栈主要用来执行程序的。

那么栈和堆有什么不同呢,我们可以从几个方面看待他们的不同!

        顺序

    栈是先进后出,堆是先进先出

缓存

    栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;

    堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

内存回收:

    栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。

申请效率:

    栈:由系统自己分配,速度较快,但是程序员无法掌握。

    堆:一般有两种方法来申请内存,new和malloc,new是一种用算符而malloc是函数。由程序员申请出来的内存一般速度比较慢,而却容易产生内存碎片,不过用起来比较方便,获取的空间大,也相对较灵活。

“java栈与堆是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI