在OopMap的帮助下,HotSpot可以快速的完成GC Root的枚举,但是随着引用变化,不可能每次指令都生成新的OopMap。实际上只有“特定的位置”才会暂停开始GC,这个位置叫做安全点(Safepoint)。Safepoint的选定既不能太少以至于GC等待时间过长,也不能太频繁以至于增大运行时负荷。
怎么选安全点呢?
安全点的选择不能太少,太少会导致GC时间过长,如果太多会导致频繁GC,所以选择了:循环的末尾、方法返回前、调用方法之后、抛异常的位置 作为安全点。
看了很多,都是这样写的。我有几处不理解
1、太多为何频繁GC,gc不是因为内存分配不够了才gc吗,和安全点有啥关系
2、为何选这几种地方,说是长时间执行?指令复用。啥意思呢,怎么复用就有OopMap
队列相当于一个高性能、高容量、高可靠的容器,可以生产消息投递进去,也可以把消息取出来消费
主题模型类似设计模式中的发布订阅模式,Topic 相当于发布消息的单位,Topic 下面的订阅者相当于观察者模式。Topic 会把发布的消息主动推送给订阅者
https://cloud.tencent.com/document/product/406/8435
对于消息的拉取队列模型和主题模型也有些区别,具体可以参考 https://cloud.tencent.com/document/product/406/4791
相似问题