java堆和栈学习笔记

栈简介

在java中栈是用来存储函数的主体变量名的,java的代码是在函数体中执行的,函数主体会放在栈内存中。栈运行是先进后出的,如栈最底层的函数是main,其上是自己编写的一系列函数,运行时是先运行自己编写的函数再运行main函数(入栈出栈的顺序)

堆简介

在java中堆是用来存储实例的(new出来的对象)。
比如在main函数中声明变量:Animal bird;此时声明的变量是存储在中的,实例化(bird = new Bird())后bird实例是存储在堆内存中的,栈内存中存储着堆内存的地址指向,当bird不再指向堆内存的实例时garbage collection就会把在堆中的实例删除掉,从而释放内存
堆内存是为了更好的管理内存,实现garbage collection。

知识点

1.每个线程都有一个栈,但每个应用程序通常只有一个堆。
2.栈内存是线程私有的,堆内存是公有的。
3.栈通常通过是在运行应用程序时启动,分配大小;栈附属于线程,当线程结束时栈被收回。
4.堆和栈都存储在计算机的RAM中。
5.当用栈过多时可导致栈溢出(大量的递归调用,大量的内存分配)[stackOverflow]
6.栈分配的内存是连续的(栈通常是提前分配好的,于线程启动时分配,固定大小),所以栈的速度更快。
7.在多线程环境下每一个线程都可以有他自己完全的独立的栈,但是他们共享堆。并行存取被堆控制而不是栈。(堆共享、栈线程私有)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值