我一直在为OpenGL实践编写一个副本(我猜也有很多),但是在编写了基本的呈现API之后,我注意到真正的“我的世界”使用的是一个批量或内存--大约800 do!我完全理解为什么它必须记住所有的块,还有暴徒,可能还有生成器的地形数据……我问自己:“这个块和代码中的block..can完全一样?”记住C++有指针,所以我尝试用Java做同样的事情,这是我能想到的唯一方法,创建每个块的一个静态实例,而不使用new关键字,这是最好的方法吗?这绝对是有帮助的.如果有可能的话,我还是想做得更好?
这是有问题的班级..。
public abstract class Block {
public static DirtBlock Dirt = new DirtBlock();
public static GrassBlock Grass = new GrassBlock();
public static RedstoneOreBlock RedstoneOre = new RedstoneOreBlock();
public static TNTBlock TNT = new TNTBlock();
public static MonsterSpawnerBlock Monserspawner = new MonsterSpawnerBlock();
public static BedrockBlock Bedrock = new BedrockBlock();
public static StoneBlock Stone = new StoneBlock();
public static GlassBlock Glass = new GlassBlock();
public static SandBlock Sand = new SandBlock();
public static WaterBlock Water = new WaterBlock();
public static SnowBlock Snow = new SnowBlock();
public static SnowGrassBlock SnowyGrass = new SnowGrassBlock();
public static IceBlock Ice = new IceBlock();
public static CoalBlock Coal = new CoalBlock();对于100个块世界,当前内存使用量约为200 64,每个块由16个块组成,宽64位,深16位,共计1,638,400块--每个块约128字节。
发布于 2013-06-17 20:11:39
是的,,这是个好方法。它被称为飞重模式。但是,考虑使用对象工厂而不是静态字段。从长远来看,这将使您的代码更易于测试。
在计算机程序设计中,飞重是一种软件设计模式。飞重是一种通过与其他类似对象共享尽可能多的数据来最小化内存使用的对象;当简单的重复表示将使用不可接受的内存量时,它是大量使用对象的一种方法。对象状态的某些部分通常可以共享,通常将其保存在外部数据结构中,并在使用时将其临时传递给飞重对象。 飞重模式的一个典型例子是用于字处理器中字符的图形表示的数据结构。对于文档中的每个字符,可能希望有一个字形对象,其中包含其字体轮廓、字体度量和其他格式数据,但对于每个字符来说,这相当于数百或数千字节。相反,对于每个字符,可能都会引用一个由文档中相同字符的每个实例共享的轻量级字形对象;只需要在内部存储每个字符(在文档和/或页面中)的位置。
来自维基百科,模式
https://stackoverflow.com/questions/17155662
复制相似问题