MineCraft和堆外内存

总览

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


考试

我使用以下测试从零开始从种子启动Minecraft服务器,这对于服务器来说是特别昂贵的操作。
  • 在server.properties中预设种子级别= 114
  • 删除世界*目录
  • 使用以下选项启动服务器,以查看GC的工作-Xloggc:gc.log
    -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps
    -Xloggc:gc.log
    -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps
  • 与一位客户联系
  • 表演 /世界村
  • 执行 /全部保存
  • 出口。
为了分析日志,我正在使用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

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

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

相关文章

kubernetes进阶之七:Service

1.概述 Service也是Kubernetes里的最核心的资源对象之一,Kubernetes里的每个Service其实就是我们经常提起的微服务架构中的一个“微服务”,之前我们所说的Pod、RC等资源对象其实都是为这节所说的“服务”------Kubernetes Service作“嫁衣”的。图1.12显…

IE Firefox css 差别 [转]

1、单位问题问题:任何距离的数值ie可以不加单位,ff必须要求写单位(0除外) 解决:写全单位如padding:0px;2、水平居中问题:div里的内容,ie默认为center,而ff默认left 解决:…

Inside Kolla - 04 Kolla 目录结构

Kolla 目录结构 把 Kolla 的源代码下载下来后,先从总体上分析 Kolla 的目录结构,查看顶层目录结构,使用 tree -L 1 输出 . ├── ansible ├── compose ├── demos ├── devenv ├── docker ├── docs ├── LICENSE ├── READ…

Json Schema的使用

直接上案例: 在Web Api通讯中,客户端发送json数据,服务端反序列化json(json与某个类形成对应关系),在某些情况下,需要校验其上传的json是否合法。 服务端是使用Json.net(newtonsoft.json)进行…

红帽企业版linux 7.4更新启动,红帽Linux企业版7.4 淘汰Btrfs文件系统

我们不得不承认Btrfs是一种古老的文件系统,当初(2007年)是由甲骨文宣布并进行中的COW(copy-on-write式)文件系统,意图取代Linux的ext。但是天不遂人愿,2011年8月9日,Fedora就决定Btrfs不再作为Fedora 16默认文件系统,走…

关于控件postback 后viewstate加载失败的问题

我写了一个控件Inherits TextBox,里面有一个复杂属性Tip,但每次postback的时候都说加载viewstate失败,除非我在!postback的情况下给Tip.xxx赋值. 下面我贴出代码,我已经搞了一天了,搞不出什么原因。 JTextBox控件 usin…

Java 8 Friday:语言设计很微妙

在Data Geekery ,我们喜欢Java。 而且,由于我们真的很喜欢jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 Java 8星期五 每个星期五,我们都会向您展示一些不错的教程风格的Java 8新功能&#…

linux下如何查看当前机器提供了哪些服务

答:使用netstat工具 在命令行下输入netstat -atun即可列出当前机器提供的服务 netstat各选项解析: -a 列出所有服务 -t 列出tcp相关 -u 列出udp相关 -n 以数字形式显示主机、端口或用户名转载于:https://www.cnblogs.com/dakewei/p/10414450.html

天猫浏览型应用的CDN静态化架构演变(转)

在天猫双11活动中,商品详情、店铺等浏览型系统,通常会承受超出日常数倍甚至数十倍的流量冲击。随着历年来双11流量的大幅增加,每年这些浏览型 系统都要面临容量评估、硬件扩容、性能优化等各类技术挑战。因此,架构方面的重点在于&…

jQuery表单验证的几种方法

1.jQuery的框架的验证:validate框架 Jquery Validate 验证规则 (1)required:true 必输字段(2)remote:”check.PHP” 使用ajax方法调用check.php验证输入值(3)email:true 必须输入正确格式的电子邮件(4)url:true 必须输入正确格式的网址(5)date:true 必须输入正确格…

h3c的gpu安装linux系统,h3c服务器u盘安装linux系统安装

弹性云服务器 ECS弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器,帮助用户打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率三年低至5折,多种配置可选了解详情什么是弹性…

查看您的Solr缓存大小:Eclipse Memory Analyzer

Solr使用不同的缓存来防止请求期间过多的IO访问和计算。 当索引不是很频繁发生时,您可以通过使用这些缓存来获得巨大的性能提升。 根据索引数据的结构和缓存的大小,它们可能会变得很大,并占用堆内存的很大一部分。 在本文中,我想展…

义务植树活动的实质

今天早上,公司来俩横横的人,门也不敲,闯进来就要找负责人,说他是绿化委员会的,问公司多少人,实事求是地答了。以为什么事儿呢,答完人家说送一通知,通知3月16日你们公司全体人员到新密白寨镇植树…

[Swift]LeetCode1118. 一月有多少天 | Number of Days in a Month

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址&a…

7、说说自定义注解的场景及实现

登陆、权限拦截、日志处理,以及各种 Java 框架,如 Spring,Hibernate,JUnit 提到注解就不能不说反射,Java 自定义注解是通过运行时靠反射获取注解。实际开发中,例如我们要获取某个方法的调用日志&#xff0c…

会话跟踪之Session

Session是服务端使用记录客户端状态的一种机制,Session使用简单,但是和Cookie相比,增加了服务器的存储压力【因为为了追求速度,服务器将Session放置在了内存中】。Cookie是保存在客户端的,然而Session是保存在服务器上…

linux 认证考试 题库,Linux认证考试题库及答案

1、一个文件的权限是-rw-rw-r--,这个文件所有者的权限是什么()a、read-onlyb、read-writec、write答案 b2、下面哪个值代表多用户启动()a、1b、0c、3d、5答案 c3、下面哪个文件代表系统初始化信息()a、/etc/inittabb、/etc/initc、/etc/procd、/etc/initproc答案 a4…

在NIO.2中创建文件和目录

如今,大量的应用程序创建文件或目录的目的非常广泛。 无论是生成报告,导出配置文件还是仅存储一些数据,能够处理这些任务都非常重要。 创建文件和目录是使用文件系统时最常用的功能之一。 图书馆的这一部分进行了相当现代化。 这方面的更新包…

实现flash的图片切换效果【可以切换多个网页或者图片】

这个是得到改进后的代码&#xff0c;可以切换多个页面 需要完整代码的朋友可以留下email如需再添加切换页面&#xff0c;只要按照下边代码部分的样式添加内容即可切换导航td的id要顺序排那个div的TOP为为上边一个div的Top加上div本身的高度&#xff1a;2371<% Page Language…

第五天

21&#xff0c;Tomcat如何修改端口号&#xff0c;如何清除项目缓存&#xff0c;默认并发量是多少&#xff1f; 端口&#xff1a;conf/server.xml 项目缓存&#xff1a;删除work文件夹下的文件 并发&#xff1a;150-200 22&#xff0c;final、finally、finalize的区别&#xff1…