实验性能
在多个方面提升Minecraft性能
内存分配
某些类可能非常占用内存,它们有着巨大的内存占用空间。 这是一个问题,因为你的电脑每个处理器缓存行只能容纳64字节,所以任何超过64的内容都需要被分割成多行。根据所调用的内容,这可能会极大地拖慢操作速度。
因此,显然最好的解决方案是确保任何东西都不超过64字节,这说起来容易做起来难,因为这样做有诸多弊端,尽管在我优化的这些情况下这些弊端无关紧要。
区块内存分配
区块非常占用内存,占用80字节。通过使用一些巧妙的Fabric-ASM技术,我们能够从区块类中删除变量并重定向所有调用。 这使我们能够将区块大小降回64字节,在某些电脑上,这可以使大多数区块操作快0.25倍!
方块内存分配
方块同样非常占用内存,占用72字节。 我们对区块做同样的处理,将内容移入一个BlockInfo类中并减轻该类的负担。 这不仅使得大多数方块现在可以更快地传递,还防止了一些方块超过128字节(这需要3个缓存行)。
实体内存分配
与区块和方块不同,实体有它自己的噩梦。它占用272字节,即5个缓存行。难怪实体会这么卡顿 xD 我已将其优化到4个缓存行,尽管进一步优化会破坏更多模组兼容性,而我没有时间去修复。 如果这个模组将来发展得足够大,我也许会重写整个实体类,并为你可能想要的值提供一个API。
为什么Mojang不这样做呢?
嗯,他们其实在做? 在做我的优化时,我注意到Mojang实际上也做了和我一样的性能改进。比如LevelInfo,尽管那已经是多年前的事了? Mojang现在似乎不太在意性能,他们做了非常奇怪的性能改动,但似乎从未真正太上心。过去几年里,一些类增长了很多,而他们并没有真正注意到这些类变得多么臃肿。 不过没关系,因为我来帮忙了。
猫鼠游戏
性能很难再榨取出更多,它是一个非常复杂的谜题,需要你对它的每一个部分都有非常详细的了解。 简单来说,电脑并不简单。它们非常努力地让程序员不必费心去思考这些,尽管程序员应该时刻考虑到这些。 我在说什么呢? 嗯,我通过这个模组获得的性能是有代价的,即额外的调用和内存分配。我只是在优化游戏内部的结构,使其与电脑更顺畅、更快速地协同工作,尽管这需要电脑记住更多东西。 不幸的是,你并不会注意到这个代价,因为在大多数情况下,性能的提升远远超过了损失。
实验性!!!
看来我不得不继续说一遍。这个模组是高度实验性的,它使用了一些超级粗略的ASM魔法,通过简单地移动类来获得性能。请勿将此模组包含在整合包中,也不要就兼容性问题提出反馈。这个模组是作为一个概念验证制作的,旨在看看我们能否通过减小缓存行中的类大小来进一步优化Minecraft。这个模组展示了明确的性能提升,尽管它相当未经测试,且仍需大量工作。我目前没有时间继续开发这个模组。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。