JVM 内存模型和垃圾回收(二): 串行垃圾回收器

JVM 内存模型和垃圾回收(二): 串行垃圾回收器

Java HotSpot VM包括三种类型的垃圾回收器,分别有各自不同的特点.

  • 串行回收(Serial GC)
    串行回收是指使用单线程的方式进行垃圾回收。适合于单个cpu线程的机器,但也可以用于多线程cpu的机器应用内存最大在100M以下的应用。可以根据操作系统配置自动选择,或者明确指定--XX:+UseSerialGC
  • 并行回收(Parallel GC)
    并行回收(也被称为throughput collector)在执行minor collections并行回收,并且中间还会涉及到并行聚合。适合中等应用,这个会在接下来具体解释。
  • 并发回收(Concurrent Mark and Sweep, 简称CMS)
    这里oralce的定义是在并行地进行垃圾回收(比如应用也一直运行),尽可能使暂停的时间很短。这个主要可以用于对反应时间要求很高的应用.这个解析来具体解释.
串行回收的特点:

With the serial collector, both young and old collections are done serially (using a single CPU), in a stop-theworld
fashion. That is, application execution is halted while collection is taking place

使用串行回收,young和old的内存都会串行的stop-the-world的方式进行回收。当进行回收的时候需要全面停止应用

  1. 对young generation回收动作
    • 首先拷贝Eden中存活的到empty的survivor空间,如果object太大,那么会直接进old generation
    • 接下来非empty中存活的对象需要进行判断,如果不够old,那么也拷贝到刚才的empty空间,否则拷贝到old空间。如果刚才empty的survivor空间不够使用,那么也是直接进入old generation
    • 接下来交换两个survivor的角色。
  2. 对old generation的回收动作
    old generation是通过mark-sweep-compact的算法进行回收的。 在mark阶段, 回收器判断哪些是存活的,sweep阶段判断是回收垃圾,compact阶段是进行内存偏移(应该说是整理,类似磁盘的碎片整理), 允许以后再使用的时候可以分配到比较大的内存,并且可以使用bump-the-pointer的技术进行分配内存。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值