minecraft_MineCraft和堆外内存

minecraft

总览

MineCraft是一个很好的例子,说明何时使用堆外内存确实可以提供帮助。
关键要求是:
  • 保留的数据大部分是一个简单的数据结构(在Minecraft的情况下,其很多字节[])
  • 堆外内存的使用可以隐藏在抽象中。


考试

我使用以下测试从头开始从种子启动Minecraft服务器,这对于服务器而言是特别昂贵的操作。
  • 在server.properties中预设level-seed = 114
  • 删除世界*目录
  • 使用这些选项启动服务器,以查看GC在做什么-Xloggc:gc.log
    -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps
    -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -Xmx6g
    -Xloggc:gc.log
    -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps
    -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -Xmx6g
  • 与一位客户联系
  • 表演 /世界村
  • 执行 /全部保存
  • 出口。
为了分析日志,我正在使用jClarity的Censum。

标准矿山Craft.io

它有两个特别昂贵的功能:
  • 它在许多字节[]中缓存块级
  • 它尝试无限制地缓存用于处理的int []。

以上测试的Censum报告如下:

初次播种
高暂停时间部分是由于必须管理大型对象。

离堆MineCraft

为解决此问题进行了两项更改:
  • 使用堆外的ByteBuffer进行长期缓存。 不安全会更有效,但不那么可移植。
  • 对缓存的int []的数量设置上限。

注意:临时int []的问题仅在将大量数据移出堆之后才对我可见。 解决最大的问题将揭示更多的快速修复问题。

相同测试的Censum报告如下所示:

cen-offheap-perc
还有一些过早的升级,即可以进行进一步的改进,但是您可以看到应用程序正在花钱。

结论

使用堆外内存可以帮助您驯服GC暂停时间,尤其是如果您的大部分数据都位于可以轻松抽象的简单数据结构中时。 这样做还可以帮助您揭示其他一些简单的优化方法,可以用来提高性能的一致性。

脚注

许多组织将性能视为增强功能和可选功能,但是,如果您灌输要求合理性能的文化,而不能满足此要求则是一个错误,那么性能问题很可能会得到解决。 cf https://bugs.mojang.com/browse/MC-56447

使用的来源

翻译自: https://www.javacodegeeks.com/2014/06/minecraft-and-off-heap-memory.html

minecraft

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值