1

問題

サーバーベースの Java ソリューションでは、静的な値を持つより大きなルックアップ テーブルが必要です (約 300 kB ですが、データは翌年の新しい値で毎年増加します)。

通常、テーブルはデータベースに配置されますが、Java コードとして Java クラスに実装することについて説明しました。テーブル値を計算するメンバー関数を 1 つだけ使用してクラスをプログラムします。オブジェクト インスタンスやその他のメモリは必要ありません。コードだけです。

コード化された表

public class Lookup {

 public static float getValue (int year, int c1, int c2, int c3) {
    if (year == 2012) {
       if (c1 == 1) { // about 70 kByte of code
             ....
            return 7.34;
       }
    }
    if (year == 2013) { // about 70 kByte of code
       if (c1 == 1) {
         ....
            return 8.23;
    }
  }

}

私の質問

テーブルは年々増加し、古い年はほとんど使用されません。年をパラメーターとして持つ関数ではなく、年ごとに関数を実装することは利点でしょうか? 毎年クラスを実施する利点はありますか? JVM は古い年が使用されていないことを検出し、メモリを解放しますか?

年ごとの特別行事

これは良いですか?メモリ消費に関してより柔軟ですか?

public class Lookup {

  public static float getValue (int year, int c1, int c2, int c3) {
    if (year == 2012) return Lookup.getValue2012 (c1, c2, c3);
    if (year == 2013) return Lookup.getValue2012 (c1, c2, c3);
  }

  public static float getValue2012 (int year, int c1, int c2, int c3) {
    if (c1==1) { // about 70 kByte of code
             ....
            return 7.34;
    }
  }
  public static float getValue2013 (int year, int c1, int c2, int c3) {
    if (c1==1) { // about 70 kByte of code
             ....
            return 8.23;
    }
 }
}

年間特別クラス

それともこちらの方がいいですか?メモリ使用量に関してより柔軟ですか?

public class Lookup {

  public static float getValue (int year, int c1, int c2, int c3) {
    if (year == 2012) return Lookup2012.getValue (c1, c2, c3);
    if (year == 2013) return Lookup2013.getValue (c1, c2, c3);
  }

}
public class Lookup2012 {

  public static float getValue (int year, int c1, int c2, int c3) {
    if (c1==1) { // about 70 kByte of code
             ....
            return 7.34;
    }
  }
}

public class Lookup2013 {

  public static float getValue (int year, int c1, int c2, int c3) {
    if (c1==1) { // about 70 kByte of code
             ....
            return 8.23;
    }
 }
}
4

1 に答える 1