golang runtime gc (1)

阻碍JVM将GC暂停降低到golang级别的(架构?)约束是什么?

没有。

如果JVM用户长时间处于困境,那么高GC暂停就是一个问题。

一个小小的搜索表明类似的解决方案也可用于Java

  • 阿祖尔提供了一个暂停收藏家 ,甚至可以扩展到100GB +
  • Redhat正在贡献shenandoah给openjdk。
  • IBM提供了节拍器 ,也针对微秒暂停时间
  • 各种其他实时JVM

与Go不同的是,openjdk中的其他收藏家是压缩世代收藏家。 这是为了避免碎片问题,并通过启用缓冲区指针分配并减少在GC中花费的CPU时间,在具有大堆的服务器级机器上提供更高的吞吐量。 至少在良好的条件下,CMS可以达到一位数毫秒的暂停,尽管与一个年轻一代的收藏家配对。

Go的收集器是非世代的,非压缩的并且需要编写障碍(参见这个其他的SO问题 ),这导致对于集合的更低的吞吐量/更多的CPU开销,更高的存储器占用空间(碎片化)以及更少的高速缓存效率堆(非紧凑型内存布局)。