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://github.com/peter-lawrey/MineOffHeap
  • 生成的日志在此处可用。 https://github.com/peter-lawrey/MineOffHeap/tree/master/logs

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

minecraft

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340926.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win2008 mysql_mysql5.7.17在win2008R2的64位系统安装与配置实例

脚本之家已经给大家讲解过MYSQL其他版本在各种环境中的安装过程,大家可以参阅正文下面的相关文章,今天一起来学习下mysql5.7.17的实例安装教学,配置上稍微不同,希望能够帮助到你。安装MySql操作系统:Windows Server 20…

结构性错误

团队成员在使用以下代码时遇到了麻烦: void extractData(String targetUri) { Path tempFile createTempFilePath(); extractDataToPathAndUpload(tempFile, targetUri); cleanUp(tempFile); } void extractDataToPathAndUpload(Path tempFile, String targetUr…

mysql小计_使用SQL实现小计,合计以及排序_MySQL

bitsCN.com--说明:个人学习笔记,实现小计合计显示,分组按BANK_IDOP_DATE升序排序--测试数据CREATE TABLE #TB(ID VARCHAR(10),BANK_ID VARCHAR(10),OP_DATE VARCHAR(10),OPERATOR_NO VARCHAR(20),AMT DECIMAL(10,2))INSERT #TB SELECT 1111,0…

mysql函数封装_PHP访问MYSQL数据库封装类(附函数说明)

/*MYSQL 数据库访问封装类MYSQL 数据访问方式,php4支持以mysql_开头的过程访问方式,php5开始支持以mysqli_开头的过程和mysqli面向对象访问方式,本封装类以mysql_封装数据访问的一般流程:1,连接数据库 mysql_connect or mysql_pco…

mule和activemq_Mule ESB,ActiveMQ和DLQ

mule和activemq在本文中,我将展示一个简单的Mule ESB流程,以了解实际中使用的Active MQ 的DLQ功能 。 我假设您有一个正在运行的Apache ActiveMQ实例(如果没有,则可以在此处下载一个版本)。 在此示例中,我…

MySQL倒序如何避免filesort_如何避免mysql查询的filesort?

我用不同的参数使用这种查询:EXPLAIN SELECT SQL_NO_CACHE ilan_genel.id , ilan_genel.durum , ilan_genel.kategori , ilan_genel.tip , ilan_genel.ozellik , ilan_genel.m2 , ilan_genel.fiyat , ilan_genel.baslik , ilan_genel.ilce , ilan_genel.parabirimi …

在Java中键入Safe SQL

字符串,字符串,字符串 无论您使用的是JPA , MyBatis还是Spring Data JDBC之类的框架,最终都将SQL语句声明为Java String。 这种方法的问题在于,您必须为每个语句编写测试,以确保它甚至是有效的SQL。 没有编…

springmvc怎么设置更改了界面不用重启_Microsoft Visual Studio 2019 更改语言包

第一次写文章,如有格式等问题,请多多包含与指点!很多人在编程时更喜欢英文界面,认为与编程语言具有相同的语境,更顺手。但是,在更改环境显示语言时,可能会遇到一些障碍,例如我之前在…

苹果电脑怎么删除软件_误格式化,删除文件怎么恢复?3款最好用的数据恢复软件推荐...

1、EasyRecovery一款威力非常强大的硬盘数据恢复工具,能够恢复丢失的数据以及重建文件系统。主要体现在可以从被病毒破坏或是已经格式化的硬盘中恢复数据。EasyRecovery在使用过程中不会在原始的驱动器中写入任何东西,其主要是在内存中重建文件分区表使数…

设计模式 生成器_生成器设计模式的应用

设计模式 生成器嗨,您好! 今天,我将分享我制作的全新设计模式系列的第一个。 构建器设计模式是开发严肃的应用程序时非常有用且通用的模式。 在这篇文章中,我将提供一个很小的构建器模式框架,因此您随时可以回到这里并…

mysql增加sort_buffer_设置sort_buffer_size

sort_buffer_sizemysql> show variables like ‘%sort_buffer_size%’;————————-———| Variable_name | Value |————————-———| innodb_sort_buffer_size | 1048576 || myisam_sort_buffer_size | 8388608 || sort_buffer_size | 262144 |———————…

先发帖

通常,我们编写代码来计算出一堆可用的答案。 让我们看看Java中的情况。 public Widget getAppropriateWidget(CustomerRequest request) { if (shelfstock.contains(request.getBarcode()) { return new ShelfWidget(); } if (backroomStock.contains(request.getBa…

C++ Qt全局异常处理器_QT教程

点击上方 蓝字关注我们今日资源今天的资源是另一套QT教程,某马发的,网上搜集到的。这已经是这个公众号发放的第三套QT教程了。关于QT:Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C 开发库,主要用来开发图形用户界面…

inputdstream mysql_【sparkStreaming】将DStream保存在MySQL

package SparkDemoimport java.sql.{Connection, DriverManager, PreparedStatement}import org.apache.spark.SparkConfimport org.apache.spark.streaming.{Seconds, StreamingContext}object DStreamToMySQL {//定义更新函数def updateFunc(newValues : Seq[Int],state :Opt…

无线设置 用户_无线WiFi远距离无线蹭网怎么中继桥接组网【详细介绍】

自从小编每天分享各种各样的无线无线WiFi蹭网、桥接、远距离组网等实例,吸引了很多朋友的兴趣,有很多网友通过关心我后,给我私信,求助我一些相关的问题,还有一些朋友建议我出一些教程。首先小编觉得有些东西只能意会不…

Hibernate和UUID标识符

介绍 在我以前的文章中,我讨论了UUID代理密钥以及用例 , 这些用例比更常见的自动递增标识符更合适。 UUID数据库类型 有几种表示128位UUID的方法,每当有疑问时,我都希望向Stack Exchange寻求专家建议。 由于通常对表标识符进行索…

应用宝苹果版_点赞应用ios版下载-点赞应用苹果版下载v1.1

《点赞应用》app是一款实用的视频生成器工具,用户可以利用它为自己的视频添加各种各样的点赞效果。应用内含有多种类型的模板,都是免费使用的,想要将你的视频变得更有趣吗?快来下载体验一下这款应用吧!软件特色1、这个…

mysql+默认值+default_十六、MySQL 中数据类型的默认值 - default 约束-搜云库

MySQL 中,所有的数据类型,都可以显式或隐式的拥有默认值。我们可以使用 DEFAULT 约束显式的为列指定一个默认值。比如CREATE TABLE t1 (i INT DEFAULT -1,c VARCHAR(10) DEFAULT ,price DOUBLE(16,2) DEFAULT 0.00);在上面这条语句中,我们为 …

SQL即服务

自2007年以来,我一直在考虑这一点,大约在Amazon 推出 S3时。 我什至尝试实现了几次,但是在设计阶段之后就失败了。 我听说过一家初创公司,也曾尝试这样做,但也失败了 。 我仍然不确定是否可以这样做,但是它…

c++ vector 一部分_《JACS》:在富电子C-H键位点上实现光控活性聚合

可逆加成-断裂链转移(RAFT)自由基活性聚合是一种调控聚合物结构组成、分子量和分布的重要聚合方法,其中,光诱导电子/能量转移(PET)的RAFT聚合反应是一种更精确的调控手段,因而经常被用于设计具有复杂3D分子结构的聚合物。然而常规的PET-RAFT法…