分布式java应用(二)

内存回收

  1. 引用计数收集器:通过计数器记录对象是否被引用
    这里写图片描述
    缺点:对于循环引用的场景没有办法实现回收。
  2. 跟踪收集器:全局记录数据的引用状态,基于一定条件触发,执行时从根集合来扫描对象的引用关系。

    • 复制:从根集合扫描出存活的对象,并将找到的存活对象复制到一块新的完全未使用的空间找那个,
      这里写图片描述

    • 标记-清除:从根集合开始扫描,对存活的对象进行标记,标记完毕后,再扫描整个空间中未标记的对象,并进行回收
      这里写图片描述

    • 标记-压缩:先对存活的对象进行标记,在回收不存活对象所占用的内存空间后,会将其他所有存活对象都往左端空闲的空间进行移动,并更新引用其对象的指针。
      这里写图片描述

Sun JDK中可用的GC

这里写图片描述

串行GC(Serial GC):扫描和复制为单线程方式,为client编译器默认GC方式

这里写图片描述
remember set: 为了解决每次MinorGC时扫描旧生代带来的性能问题。Sun JDK在进行对象赋值时,如果发现赋值的为一个对象引用,则产生write barrier,然后检查需要赋值的对象是否在旧生代及赋值的对象引用是否指向新生代;如果满足条件,则在remember set做个标记。
SafePoint: Sun JDK在进行对象引用扫描时,为了避免引用关系发生变化,在编译代码时为每段方法注入SafePoint(通常位于方法中循环的结束点及方法执行完毕的点),等待所有用户线程进入SafePoint,如果此时要进行MinorGC,则将其内存页设置为不可读状态,这就是GC停顿
这里写图片描述

并行回收GC(Parallel Scavenge):扫描和复制为多线程方式,为server编译器默认GC方式
  • -XX:InitialSurvivorRatio: Eden、S0、S1的默认比例划分,默认值8

  • -XX:SurvivorRatio JDK1.6以后采用,并行回收GC将此值+2赋给InitialSurvivorRatio 。当同时配置了InitialSurvivorRatioSurvivorRatio 时,以前者为准。

  • -XX:-UseAdaptiveSizePolicy 来固定Eden、S0、S1的大小。

PS GC不是根据-XX:PretenureSizeThreshold 来决定对象是否在旧生代上直接分配,而是当需要给对象分配内存时,Eden Space空间不够的情况下,如果此对象的大小大于等于Eden Space的一半的大小,就直接在旧生代上分配。

  • -XX:ParallelGCThreads 强制指定线程数。
并行GC(ParNew):
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天进步一点_点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值