JVM 内存模型和垃圾回收(三): 并行回收器

来源:互联网 发布:sarah lynn 知乎 编辑:程序博客网 时间:2024/06/05 02:15

JVM 内存模型和垃圾回收(三): 并行回收器

并行回收器类似于串行回收器,最主要的区别是是否采用了多线程进行加快垃圾回收。

  • Young Generation
    并行回收仍然是一个stop-the-world的回收方式。但是在Young上进行并行回收,就会减少应用暂停的时间。

  • Old Generation
    这个和串行回收一样,使用的方式是mark-sweep-compact. 首先将内存分为固定的区域。

    • 在marking阶段,初始化application code直接能获取的存活对象分配给各个线程,之后由各个线程去进行mark。如果一个object是存活的,这个区域的数据就会被更新,包括这个对象的大小和位置。
    • 在summary阶段, 操作的是区域,而不是对象了。因为之前compact的方式,在前面的区域总是密集的,以至于把这些区域可用的内存空间提取出来相对来说作用并不会很大。所以在summary的第一件事就是验证区域的密集程度, 从左到右,直到遇到一个相对来说(storage/cost大于某个值)比较值得的区域,然后再从最左边到这里是不用移动和聚合的,本身到最后边进行聚合(聚合的是对象,不是区域)。summary阶段会计算每个compact区域聚合到一起的新的存活的位置。

并行回收的特点:

  1. 多cpu的环境
  2. 如果对线程数需要控制,那么需要限制--XX:ParallelGCThreads=n来选择一个单独的收集器
阅读全文
0 0
原创粉丝点击