基本上,我想要做的是从同一个实例创建许多对象。 我并不是要创建一个像这样的新实例:
Object obj = new Object();
我的意思是从这个实例中获得多个对象。
举个例子:
//Long way that causes more lag
Object obj = new Object();
Object obj2 = new Object();
Object obj3 = new Object();
//causes less lag
Object[] = <all the instances of obj>
long way
#####
##### //# = block | each # has its own instance
short way
#####
##### //# = block | each # is controlled by ONE instance
我无法想到任何这方面的例子,但我认为Minecraft会将这个用于所有块。
我想知道如何做到这一点的原因是因为我认为它会减少延迟。
如果有办法/不是办法,请告诉我。
答案 0 :(得分:2)
我认为您正在寻找Flyweight pattern。这种技术允许在许多类似对象之间共享对象数据,从而大大降低了内存需求。我对Minecraft的内部结构并不熟悉,但我强烈怀疑他们使用这个(或类似的东西)作为他们的块。它通常在以下时间使用:
除了上面链接的维基百科文章外,请查看有关该主题的this article。
答案 1 :(得分:0)
对象和对象实例的含义相同。如果你想创建多个对象或多个实例,同样的事情,你需要调用new作为数组分配,例如。
Object[] obj = new Object[size];
答案 2 :(得分:0)
您不能拥有“同一实例的不同对象”,因为对象和实例是相同的。像“人类”和“人”一样,或多或少。
但是,您可以将多个引用添加到同一实例,这可能有助于在适当的情况下保持内存占用和创建/复制时间。请注意,在Java中,使用对象类型定义的变量,例如:
String str;
实际上并没有持有物体。它持有对象的引用。所以你可以有类似的东西:
String originalString = "This in a string".
String a = originalString;
String b = originalString;
String[] arr = new String[10];
for ( int i = 0; i < arr.length; i++ ) {
arr[i] = originalString;
}
在这种情况下,您将只有一个对象。此代码示例中的每个变量 - originalString
,a
,b
以及arr
的所有元素 - 都是对同一对象/实例的引用。