0

Java アプリケーションのパフォーマンスを向上させるために、オブジェクトを記述する static final フィールドを持つクラスを作成し、配列からオブジェクトのすべてのデータを取得する静的メソッドを配置することを考えていました。

例: オブジェクトを作成したいとしましょう: ある人が年齢、身長、体重、目の色、および世界座標を持っているとします。

通常、私は次のようなことをします:

  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 オブジェクトが格納されていることがわかりました。ヒープと、すべてのオブジェクトには、オブジェクトを記述するために割り当てられる最小バイト数があること。

私がやりたいのは、代わりにこれです:オブジェクトの人物を説明するクラスを作成します:

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 

}

このソリューションが実行可能かどうかを本当に知りたいです.float配列のみを使用して個人データを保存しているため、メモリ内のデータの空間的近接性を取得できるため、データにアクセスすると作成しないと思いますどのページも見逃せません。

また、オブジェクトをシリアル化または逆シリアル化する必要はありません。float 配列はそのままでよいため、静的メソッドを使用して float 配列にアクセスするだけです。

4

1 に答える 1

4

これで、Java オブジェクトがヒープに格納され、すべてのオブジェクトにオブジェクトを記述するために割り当てられる最小バイト数があることがわかりました。

うん、これは配列にも当てはまります。

あなたのコードが大量のメモリを節約しているとは思えませんが、私の見解では、コードの読み取りと保守が大幅に難しくなります。

本当に、これをしないでください。

個人データを格納するために浮動小数点配列のみを使用しているため、メモリ内のデータの空間的近接性を取得できるため、データにアクセスしてもページミスは発生しないと思います。

インスタンス内のすべてのデータを使用すると、Person空間的な近接性も得られます。これは別の非利点です。

于 2013-03-27T21:06:43.560 に答える