2次元配列で、配列のサイズを切り替えると、メモリの異なる量を要します

サイモン:

私は、byte型のJavaで2Dアレイ行列を宣言しました。寸法(^ 6×4の10)で使用されるメモリをチェックするときに大幅同じサイズの行列とは異なるが、大きさ(×10 ^ 6 4)でした。

// Measure memory before matrix initialization -> 2MB
System.out.println("Meg used="+(Runtime.getRuntime().totalMemory()-
 Runtime.getRuntime().freeMemory())/(1000*1000)+"M");

byte[][] test = new byte[4][1000000]; // init

// Measuring memory after -> 6MB as expected
System.out.println("Meg used="+(Runtime.getRuntime().totalMemory()-
 Runtime.getRuntime().freeMemory())/(1000*1000)+"M");
// Measure memory before matrix initialization -> 2MB
System.out.println("Meg used="+(Runtime.getRuntime().totalMemory()-
 Runtime.getRuntime().freeMemory())/(1000*1000)+"M");

byte[][] test = new byte[1000000][4]; // init

// Measuring memory after -> 30MB
System.out.println("Meg used="+(Runtime.getRuntime().totalMemory()-
 Runtime.getRuntime().freeMemory())/(1000*1000)+"M");

期待通りの配列が4メガバイトを取るように、最初のケースでは、私は6メガバイトを取得します。しかし、第二のケースではマトリックスは28メガバイトを取ります。なぜ彼らは同じではありませんか?

ave4496:

それは違いはオーバーヘッドです。すべての配列のためのJavaは、情報を保存しなければなりません。それは1000000の短い配列対ちょうど4長い配列です。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=6341&siteId=1