JAVA的分代垃圾回收机制(基本讲解适合新人,方便理解) 以及容易造成内存泄漏的操作(补充)

GC的基本原理 

1.JAVA的内存管理很大程度上就是对,堆中对象的管理!!!

对象空间的分配:即使用new关键字创建的对象都存放在堆中

对象空间的释放:将对象赋值为null即可,垃圾回收机制将回收所有"无用”对象的内存空间,从而释放内存

2.垃圾回收的过程

第一步:通过"引用计数法"和"引用可达法"发现无用对象

第二步:回收无用对象占用的内存空间

3.三个需要注意的重点

第一个:程序员无权调用垃圾回收机制

第二个:程序员可以通过调用System.gc()方法来申请让JVM启动FUll GC,因为因为运行垃圾回收成本高且影响系统性能,所以只能调用方法来进行申请

第三个:finalize()方法,是JAVA提供给程序员用来释放对象或资源的方法,但尽量少用

分代机制

三种GC 

1.minor GC用于清理年轻代区域。Eden(亚当)区满了就会触发一次Minor GC。清理无用对象,将有用对象复制到“Survivor1”(成熟一区)、 “Surwivor2”(成熟二区)中

2.Majer GC用于清理老年代区域

3.Full GC用于清理年轻代、年老代区域。成本较高,会对系统性能产生影响

1.年轻代

1.所有新生成的对象首先是放在Eden(亚当)区

2.年轻代的目标就是尽可能快速的收集那些生命周期短的对象,然后使用minor GC清理年轻代的内存,算法采用较为频繁的复制算法进行频繁的操作.但会浪费内存空间

3.在年轻代中经历了N(默认15)次垃圾回收后仍然存活的对象,就会被放到年老代中

2.年老代

1.年老代中存放的都是一些生命周期较长的对象

2.年老代对象越来越多,我们就需要启动Major GC和Full GC(全量回收),来一次大扫除,全面清理年轻代区域和年老代区域

3.永久代

1.用于存放静态文件,如Java类、方法等。永久代对垃圾回收没有显著影响

2.JDK8以后已经没有“永久代”了,使用metaspace元数据空间和堆替代

3.而JDK8之前"永久代"就是内存中"方法区"的体现

容易造成内存泄漏的操作(补充)

1.创建大量的无用对象,对堆空间造成极大的负担

2.静态集合类的使用

3.各种连接对象如IO流等,使用后为关闭一直保持连接状态

4.监听器的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值