Java垃圾回收机制

what?是什么?:

          GC 垃圾回收机制,是jvm对内存对象回收的一种机制

why?垃圾是什么?为什么有这个机制?

          程序在运行过程中会产生很多对象,或者是数组等,当方法结束后这些对象并没有被销毁,还占用着内存,没有垃圾回收机制,久而久之内存就会消耗殆尽。

HOW?:如何回收(即回收算法)?回收执行器有哪些?

          Java内存分为:新生代、老年代、元区间,元区间放一些常量不会回收,所以只对新生代老年代进行回收

          新生代:Eden、S0、S1区域,采用的回收算法是复制算法,因为效率高速度快。具体做法是:当有新对象创建时先从Eden区域划分内存给新对象,如果发现内存不足以提供时,就会触发一次scavenge GC回收Eden和s0区域,幸存的对象会复制到s1区域,清空Eden和s0区域。

          老年代:在新生代经历多次gc仍然存活的对象会被复制到老年代,当老年代的内存不足时,会触发一次full GC,回收老年代对象。回收算法采用标记-整理法,具体做法是,标记需要存活的对象,计算新的地址,往一边区域挪,整理完成后,清空另一边整块内存区域。

回收器有:

          1⃣️串行垃圾回收器:会暂停应用线程,执行GC线程,适合单核cpu,暂停应用无感的程序

          2⃣️并行垃圾回收器:也会暂停应用线程,但是是多线程执行gc,适合多核cpu,对暂停应用无感的程序

          3⃣️cmg并发标记扫描器:多线程扫描标记需要清理的对象,保证了最短的暂停时间

          4⃣️G1垃圾回收器:将要回收的内存分为几个区域,也有eden区,s0区

发现哪些无用信息对象常用算法:

          引用计数法(有对象引用时加1,丢弃时减1,为0)、根搜索法

回收无用信息对象占用的内存常用算法:

          标记清除算法、复制算法(老年代、新生代)

GC的执行机制:

          1、scavenage GC:当新对象生成申请Eden区域空间申请失败时,就会触发Scavenge GC,对Eden域进行GC。这种GC是对年轻代的Eden进行,不会影响老年代

          2、Full GC:对整个堆进行整理,包括Young、Tenured和Perm

Java性能调优方法:

          1、不要用system.gc(),因为对增加gc频率

          2、不用的对象显示标记为NULL, 好判定

          3、尽量用StringBuild代替string,因为string底层是final修饰的,不会被回收。用int基本类型代替Integer包装类型对象

          4、合理使用静态变量,静态变量不会被回收占用内存

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值