jvm-jvm垃圾回收

最近学习jvm,一点理解,希望和大家一起分享,不对的地方,大家共同讨论。

写在前面的话,很重要。jvm不仅仅是垃圾回收,还有很多别的事,如类加载、对接操作系统等。这里我们说jvm的垃圾回收。

为什么要垃圾回收?因为我们每台物理机的内存是有限固定的,我们的应用程序只要在运行就会不断生成新的对象。这时候如果需要保证服务器能继续工作,就必须去进行对象的回收。JVM这里帮我们进行了回收,回收垃圾的时候要关注什么?这里其实可以看做一个业务需求:

  1. 回收的正确性。要保证回收掉的是正在已经不使用的对象。
  2. 回收的高效性。让我们的程序能更好的使用服务器的内存。能够支撑我们高并发、请求量比较高的服务

拿到这个需求后,我们开始开发:

  1. 如何保证正确性:可达性分析算法
  2. 如果高效回收:分代回收->各种算法(标记整理、复制清除等等)

这里发现,在使用这些做垃圾回收的时候,都需要在某个回收过程中,停止用户进程产生新的垃圾对象,由于垃圾回收无法避免停止用户线程(stop the  world),但是我们可不可以做到时间更短呢,如果时间短到毫秒级,是不是可以做到用户无感知。

首先谈下算法,每种算法的优势,它适合处理什么样内存使用模型:

这里我认为,这里跟我们的业务有很大关系,我们的业务是不是会瞬间产生很多对象,我们的对象是对大对象还是小对象,我们业务对象存活的时间。这里会决定我们使用什么样的垃圾算法,继而影响我们选择不同的垃圾收集器(不同的垃圾收集器的算法不同,特点不同),这里也是我们jvm调优考虑的重点,我们相关的参数如何配置,当然这需要我们通过不断的参数配置,找到适合我们当前业务系统的更好的配置参数大小。

 

可达性分析算法:

复制-清除算法:

标记-整理算法

复制清除算法:

 

分代回收

这里对内存做了逻辑上的分片。为什么这样处理?

//TODO

分代模型

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值