0

为了提高我的 java 应用程序的性能,我正在考虑创建一个具有描述对象的静态最终字段的类,然后放置从数组中检索对象的所有数据的静态方法。

示例:假设我要创建一个对象人:假设一个人有年龄、身高、体重、眼睛颜色和世界坐标。

通常我会做这样的事情:

  public class Person {
    private int age;
    private int height;
    private int weight;
    private int eyeR;
    private int eyeG;
    private int eyeB;
    private float x;
    private float y;
    private float z;
    //... getters and setters
  }

我想将人从客户端发送到服务器,所以我必须序列化对象并将它们发送到服务器,这将反序列化对象并复活另一端的人,现在我们都知道 java 对象存储在堆,并且每个对象都分配了最少的字节来描述该对象。

我想做的是:创建一个描述对象 person 的类:

public class Person {
 // size contains the number of bytes to describe my person
 public static final int size; 
 //this byte here is used to identify a Person in a float array
 public static byte classID = 0;
 //these variables contains the position of my attributes inside a float array
 // since floats / int are all coded in 4 bytes
 public static final int age = 0;
 public static final int height = 1;
 public static final int eyeR = 2; 
 public static final int eyeG = 3;
 public static final int eyeB = 4;
 public static final int x = 5;
 public static final int y = 6;
 public static final int z = 7;

 //i don't check for nullity, i trust myself.
 public static int getAge(final float[] person) {
    return person[Person.age]; 
 }
 public static void setAge(final float[] person, float age) {
    return person[Person.age] = age; 
 }

 ... do the same thing for the rest also you can store 

}

我真的很想知道这个解决方案是否可行,因为我只使用浮点数组来存储我的个人数据,我可以在内存中获得我的数据的空间接近度,所以我想如果我访问我不会制作的数据任何页面丢失。

我也不必序列化或反序列化我的对象,因为我的浮点数组是好的,我将使用我的静态方法来访问我的浮点数组。

4

1 回答 1

4

现在我们都知道 java 对象存储在堆中,并且每个对象都有最少的字节分配来描述该对象。

是的,这也适用于数组。

我看不到您的代码可以节省大量内存,但在我看来,它会使代码更难阅读和维护。

真的,只是不要这样做。

因为因为我只使用浮点数组来存储我的人员数据,所以我可以在内存中获得我的数据的空间接近度,所以我想如果我访问数据我不会丢失任何页面。

使用Person实例中的所有数据,您也将具有空间接近性。这是另一个非好处。

于 2013-03-27T21:06:43.560 回答