内存分配及其引用

本文详细介绍了内存管理的三种方式:静态、栈式和堆式内存分配的特点与区别,并深入探讨了不同类型的引用(强引用、软引用、弱引用、虚引用)在Java中的作用与应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内存分配:

1.静态:静态存储区,内存在程序编译的时候就一句分配好,这块的内存在程序整个运行期间都一直存在,主要存放静态数据、全局的static数据和一些常量。

2.栈式:在执行函数时,函数一些内部变量的存储都可以在栈上面创建,函数执行结束的时候这些存储单元就会自动被释放掉。

3.堆式:也叫动态内存分配,可以用malloc或者new来申请分配一个内存。在C、C++中可能需要自己来是否,而JAVA直接依赖GC机制。

堆栈的区别:堆是不连续的内存区域,堆空间比较灵活也特别大;栈是一块连续的内存区域,大小是由操作系统决定。堆管理很麻烦,频繁的new/remove会造成大量的内存碎片,这样会慢慢导致效率低下;而栈是先进先出,进出完全不会产生碎片,运行效率高且稳定。

成员变量全部存储在堆中,局部便利的基本数据类型和引用存储于栈中,引用的对象实体存储在堆中。

引用:

1.StrongReference强引用:从不回收,知道JVM停止时才会终止

2.SoftReference软引用:当内存不足的时候终止

3.WeakReference弱引用:当垃圾回收的时候进行回收,CG后终止

4.PhatomReference虚引用:在垃圾回收的时候进行回收,CG后终止

PS:开发时,为了防止内存溢出,处理一些占用内存比较大且生命周期长的对象的时候,可以尽量使用软引用和弱引用。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值