4

Vector や ArrayList のサイズ、またはそのオブジェクトのサイズを Java でバイト単位で取得することは可能ですか? size() 関数は要素の数のみを返します。しかし、オブジェクトの実際のサイズを取得したいです。

4

4 に答える 4

0

暗黙的なオブジェクトのサイズが異なる異なるJDK。

暗黙のオブジェクトサイズにベクトルまたは配列リストの長さを掛けることでカウントできます。たとえば、10 個のレコードを含む整数の配列リストを宣言すると、Java 整数は 32 ビット、つまり 32/8 = 4 バイトになります。10 個のレコードがあるため、10x4 = 40 バイトです。

標準 Java では byte = 8 ビット、short = 16 ビット、int = 32 ビット、long = 64 ビット。

于 2013-04-17T11:58:40.883 に答える
0

これはメモリ使用量を表示するはずです

Runtime rt = Runtime.getRuntime();
long m0 = rt.totalMemory() -  rt.freeMemory();
Object obj = new Object();      // create your object here
long m1 = rt.totalMemory() -  rt.freeMemory();
System.out.println(m1 - m0);

しかし、それは機能しません。これは機能します(少なくとも私のPCでは)

public static void main(String[] args) throws Exception {
    Object obj = createObject();
    long m0 = usedMem();
    long m1 = usedMem();
    obj = null;
    for (int i = 0; i < 100; i++)
        System.gc();
    m0 = usedMem();
    obj = createObject();
    for (int i = 0; i < 100; i++)
        System.gc();
    m1 = usedMem();
    System.out.println(m1 - m0);
}

private static long usedMem() {
    return Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
}

private static Object createObject() {
    return new Object();
}

8new Object およびnew String() に対して出力された場合、40正しく機能し、オブジェクトを作成してそのサイズを確認します

詳細はこちらhttp://www.javaspecialists.eu/archive/Issue029.html

于 2013-04-17T12:15:30.927 に答える
0

とりあえず、サイズ取得用に自作実装しました。

long sizeof(ArrayList<String> list)
{
    long size = 0;
    for(String s: list)
        size+=s.length();
    return size;
}
于 2013-04-17T11:54:50.400 に答える