内存分配及其引用

内存分配:

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

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

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

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

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

引用:

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

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

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

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

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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值