0

100個の要素を持つデータ型doubleの配列(たとえば)をアプリケーションサーバー(Linux CentOS)のJava(1.6)メソッドからバイナリ転送(たとえばAMFプロトコル)を使用してクライアントに渡す場合、何バイトが送信されますか?

たとえば、倍精度浮動小数点数の配列の場合、各数値は8バイトを占めます。したがって、配列の長さが100要素で、各要素がnullの場合、800バイトの配列サイズが送信されますか?つまり、nullの場合、各要素は8バイトを占有しますか?

アップデート:

最終的に私が上記の質問で得ているのは、プロットを表すサーバー上に(x、y)データセットがあるということです。yデータは一意ですが、xデータは等間隔に配置されています。したがって、サーバーからクライアントにxデータを送信することを回避できます(代わりに、x間隔を送信して、クライアントに予測可能なx軸の値を再作成させます)。ただし、サーバーからクライアントに渡される配列は次のように表示されます。

myArray[0].x = null
myArray[0].y = 1e-302
myArray[1].x = null
myArray[1].y = 1.42e-202
...
myArray[99].x = null
myArray[99].y = 2.3234e-3

nullそして、それらの値がそれぞれ8バイトの長さになるのか、それとも、それらがであるためにメモリをいくらか節約できるのかどうか疑問に思っていますnull

更新2:

BlazeDS(LCDSなど)のドキュメントについては、PDFページ82で、JavaからActionScript AMF3(BlazeDSおよびLCDSで使用)への変換について説明しています。PDFページ83の表は、JavaタイプnullがActionScriptAMF3タイプにマップされていることを示していますnull

4

2 に答える 2

3

AMF0では、リンク先のWikipediaの記事によると、「数値」(AMF0の唯一の数値型ですが、Javaに対応しますdouble)は9バイト(0x00数値であることを示すため、および数値の倍精度浮動小数点数の場合は8バイト)になります。ポイント表現)、anullは1バイト(0x05)になります。配列には2バイト(初期0x08および最終0x09)とその内容が含まれるため、配列の長さがnで、要素のkが数値の場合、その合計サイズは2 +9× k +(nk)=2+になります。 n +8× k。ご覧のように、null■送信ペイロードを大幅に削減できる可能性があります。

AMF3は詳細が異なりますが、類似しています。

于 2012-09-12T02:35:34.983 に答える
2

JavaSEにはDOUBLEデータ型はありません。null許容型なので、話しているのはDouble(ではなくdouble)です。ラッパー型()のインスタンスはDouble、プリミティブ型()の値よりもかなり多くのメモリを使用しますdouble

null参照は、クラスのインスタンスへの参照のメモリ消費量に加えて、インスタンス自体を格納するために使用されるメモリよりも少ないメモリを使用します。null参照は4バイトまたは8バイトを使用すると単純に想定するかもしれませんが(32ビットまたは64ビットのJVMを使用しているかどうかによって異なります) 、JVMがオブジェクトのサイズを潜在的に縮小するために使用できる派手な最適化があります参照(これについては、ここここで詳しく説明します)。

いずれにせよ、もしあなたがメモリ使用量にとても関心があるのなら、なぜあなたDoubleは代わりにまったく使用しているのdoubleですか?「値なし」の値が必要なだけの場合は、を使用しますDouble.NaN

于 2012-09-12T02:28:09.317 に答える