通过使用对对象的引用在 java 中节省 RAM
Conserving RAM in java by using references to objects
我对 java 了解一些,并且对计算机的低级功能了解很多,所以我一直在寻找节省内存的方法。我也是矮人要塞的粉丝,所以我一直在尝试让一些类似的系统运行起来。所以,我想做的是制作多个瓷砖,为它们分配某种类型的 material,并且所有具有相同类型 material 的瓷砖共享相同的 material 对象。我画了一张小图来说明:here
java 会自动执行此操作吗?还是我必须自己实施?如果我制作了 material 属性的两份副本,是否有办法将它们合并为一个?
感谢您的回复。
假设您有 material.
interface Material{
void render( Context c);
}
然后你有一些 material 的实例。
class Concrete implements Material{
static Texture concreteTexture = loadConcreteTexture();
Texture texture;
public Concrete(){
texture = concreteTexture();
}
void render(Context c){
//do stuff with texture.
}
}
在这种情况下,所有混凝土实例都有 1 个混凝土纹理,它会在 class 加载时加载。纹理在构造函数中分配,但您可以使用工厂方法来代替创建新的 materials 和 load/assign 资产。
我不确定我是否理解你的问题,但假设每个图块都由一个对象表示,而 material 由一个共享对象表示,那么你可以在 java 中使用单例模式:
interface MatType{
String getType();
void draw();
}
class Cement implements MatType{
private static Cement cement = null;
private string type = "Cement";
/*some cement properties here*/
private Cement(){}
/*
By using this method you will get always the same
object which will be shared between all objects
that reference it.
*/
public static Cement getInstance(){
if (cement == null)
cement = new Cement();
return cement;
}
String getType(){
return type;
}
void draw(){
//draw
}
}
class Tile{
MatType type = null;
/*tile properties*/
public Tile(String t){
if (t.equals("Cement"))
type = (MatType)Cement.getInstance(); /*casting is for clarification only*/
if (t.equals("Iron"))
type = Iron.getInstance(); /*same logic of Cement*/
.
.
.
}
String getType(){
return type.getType();
}
void draw(){
type.draw();
}
}
我对 java 了解一些,并且对计算机的低级功能了解很多,所以我一直在寻找节省内存的方法。我也是矮人要塞的粉丝,所以我一直在尝试让一些类似的系统运行起来。所以,我想做的是制作多个瓷砖,为它们分配某种类型的 material,并且所有具有相同类型 material 的瓷砖共享相同的 material 对象。我画了一张小图来说明:here java 会自动执行此操作吗?还是我必须自己实施?如果我制作了 material 属性的两份副本,是否有办法将它们合并为一个?
感谢您的回复。
假设您有 material.
interface Material{
void render( Context c);
}
然后你有一些 material 的实例。
class Concrete implements Material{
static Texture concreteTexture = loadConcreteTexture();
Texture texture;
public Concrete(){
texture = concreteTexture();
}
void render(Context c){
//do stuff with texture.
}
}
在这种情况下,所有混凝土实例都有 1 个混凝土纹理,它会在 class 加载时加载。纹理在构造函数中分配,但您可以使用工厂方法来代替创建新的 materials 和 load/assign 资产。
我不确定我是否理解你的问题,但假设每个图块都由一个对象表示,而 material 由一个共享对象表示,那么你可以在 java 中使用单例模式:
interface MatType{
String getType();
void draw();
}
class Cement implements MatType{
private static Cement cement = null;
private string type = "Cement";
/*some cement properties here*/
private Cement(){}
/*
By using this method you will get always the same
object which will be shared between all objects
that reference it.
*/
public static Cement getInstance(){
if (cement == null)
cement = new Cement();
return cement;
}
String getType(){
return type;
}
void draw(){
//draw
}
}
class Tile{
MatType type = null;
/*tile properties*/
public Tile(String t){
if (t.equals("Cement"))
type = (MatType)Cement.getInstance(); /*casting is for clarification only*/
if (t.equals("Iron"))
type = Iron.getInstance(); /*same logic of Cement*/
.
.
.
}
String getType(){
return type.getType();
}
void draw(){
type.draw();
}
}