golang runtime gc (1)
阻碍JVM将GC暂停降低到golang级别的(架构?)约束是什么?
没有。
如果JVM用户长时间处于困境,那么高GC暂停就是一个问题。
一个小小的搜索表明类似的解决方案也可用于Java
- 阿祖尔提供了一个暂停收藏家 ,甚至可以扩展到100GB +
- Redhat正在贡献shenandoah给openjdk。
- IBM提供了节拍器 ,也针对微秒暂停时间
- 各种其他实时JVM
与Go不同的是,openjdk中的其他收藏家是压缩世代收藏家。 这是为了避免碎片问题,并通过启用缓冲区指针分配并减少在GC中花费的CPU时间,在具有大堆的服务器级机器上提供更高的吞吐量。 至少在良好的条件下,CMS可以达到一位数毫秒的暂停,尽管与一个年轻一代的收藏家配对。
Go的收集器是非世代的,非压缩的并且需要编写障碍(参见这个其他的SO问题 ),这导致对于集合的更低的吞吐量/更多的CPU开销,更高的存储器占用空间(碎片化)以及更少的高速缓存效率堆(非紧凑型内存布局)。