3

newJava では、配列を宣言してから、領域を割り当てるために呼び出します。そのため、4 つの名前付き整数を持つクラスは、サイズ 4 の配列よりもスペースが少なく、局所性が優れています。

4 つの要素の配列を持つ方法はありますが、名前付き vaiables と同じ方法で割り当てますa1, a2, a3, a4

int x[4]C++ を知っている人にとって、これは求めるのではなく求めるのと同じです。int *x

class X
{
   int x1;
   int x2;
   int x3;
   int x4;
};

[ Class OID ][x1][x2][x3][x4] = 1 ref + 4 int

class Y
{
   int y[];
};

y=new int[4];

[ Class OID ][Y] ======> [Array OID][Array Size][y][y][y][y] = 3 ref + size + 4 int
4

2 に答える 2

3

Java 6 以降、理想的な状況では、オブジェクトは実際にはヒープではなくスタックに割り当てられます。一般に、これは参照が作成されたスコープを離れないオブジェクトに対して試行されます。真実は、実際には、「新しい」が完全に無料である場合があるということです! Java コードは冗長で非効率的に見えるかもしれませんが、記述した内容を驚くほど効率的なマシン コードに変換する最適化コンパイラのレイヤーがいくつかあります。

于 2013-11-15T03:42:05.400 に答える
0

あなたができる唯一のことはこれです

int x1, x2, x3, x4;

void set(int i, int v) {
    switch(i) {
    case 0:
        x1 = v;
        break;
    ...
    default:
        throw new IndexOutOfBoundsException();
    }
}

int get(int i) {
...

バイトコードのスイッチは最適化されていることに注意してください。i順次テストするのではなく、必要なコードに直接移動します。

ILOAD 1
TABLESWITCH
  0: L1
  1: L2
  2: L3
  3: L4
  default: L5
于 2013-11-15T04:47:29.053 に答える