5

メモリ効率に関して、次の質問があります。

対応する変数に正しいデータ型を使用することが不可欠です。の数値1を a として表すbyteには、a long の 8 分の 1 のメモリが必要です (ただし、間違っている場合は訂正してください)。私の質問は、変数の型または初期化を定義するときにメモリの割り当て/控除が行われるかどうかです。奇妙に思えるかもしれませんが、初期化する必要のないグローバル変数に関して質問します。グローバル変数には、ローカル変数に並置されたデフォルトがあるためです。また、オブジェクト データ型の既定のサイズがあるかどうかも知りたいです。これは JVM (32 ビットと 64 ビット) に基づいていると思いますか?

4

1 に答える 1

2

対応する変数に正しいデータ型を使用することが不可欠です。

もちろん。Java は厳密に型指定された言語です。あなたのポイント?

数値 1 をバイトとして表すには、8 分の 1 のメモリが必要です (ただし、間違っている場合は修正してください)。

あなたが間違っている。隣接して宣言されている他の変数と型に応じて、JVM で使用されるパディングに応じて、4 バイトまたは 8 バイトかかる場合もあります。

私の質問は、変数の型または初期化を定義するときにメモリの割り当て/控除が行われるかどうかです。

ない。newたとえば、コンストラクター中ではなく、割り当て時、つまり時間に発生します。

奇妙に思えるかもしれませんが、デフォルトがあるため初期化する必要がないグローバル変数に関して質問します

すべての変数を初期化する必要があります。静的変数またはインスタンス変数の場合、初期化コードを記述する必要はありません。Java に関する「グローバル」という言葉には意味がありません。

ローカル変数とは対照的です。

それが何であるかに違いはありません。変数には、静的、インスタンス、またはメソッドローカルのいずれであっても、それに割り当てられたスペースと値が格納されている必要があります。

また、オブジェクト データ型の既定のサイズがあるかどうかも知りたいです。これは JVM (32 ビットと 64 ビット) に基づいていると思いますか?

質問は無意味です。クラスのインスタンスObjectは常に同じサイズであり、慎重に文書化または指定されていないため、JVM によって自由に変更できます。他のクラスのインスタンスも同様です。私が見ることができる有用な意味で「デフォルト」はどこにもありません。

于 2013-04-16T10:20:26.620 に答える