57

同様の質問がありますが、この特定の質問への回答を避けているようです。Java プログラムが Java のランタイム API を介して使用するメモリを取得するにはどうすればよいですか?

ここでの答えは、次のようなことができることを示しています。

System.out.println("KB: " + (double) (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1024);

しかし、これは、実行するプログラムに関係なく、常に同じ数値を返します。たとえば、以下のプログラムでは、マップにいくつの数字を入れてもメモリ使用量は変わりません。

package memoryTest;

import java.util.HashMap;
import java.util.Map;

public class MemoryTest {

    static Map<Integer, NewObject> map = new HashMap<Integer, NewObject>();

    public static void main(String[] args){

        System.out.println("KB: " + (double) (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1024);
        fillMemory(25);

        System.out.println("KB: " + (double) (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1024);
    }

    static int j=0;
    public static void fillMemory(int i){

        for(int k=0; k< 2000; k++)
            map.put(j++, new NewObject());

    }
    

    public static class NewObject{
        long i = 0L;
        long j = 0L;
        long k = 0L;
    }
    
}

cambecc のメイン メソッド経由で、出力は次のとおりです。

3085、合計: 128516096、フリー: 127173744、差分: 671120

173579、合計: 128516096、フリー: 110033976、差分: 671128

335207、合計: 128516096、フリー: 92417792、差分: 637544

672788、合計: 224198656、フリー: 159302960、差分: 1221520

1171480、合計: 224198656、フリー: 106939136、差分: 1221544

1489771、合計: 368377856、フリー: 227374816、差分: 1212984

1998743、合計: 368377856、フリー: 182494408、差分: 1212984

4

5 に答える 5

96
于 2013-06-29T05:02:34.380 に答える
1
public static void memoryStats() {
    int mb = 1024 * 1024;
    // get Runtime instance
    Runtime instance = Runtime.getRuntime();
    System.out.println("***** Heap utilization statistics [MB] *****\n");
    // available memory
    System.out.println("Total Memory: " + instance.totalMemory() / mb);
    // free memory
    System.out.println("Free Memory: " + instance.freeMemory() / mb);
    // used memory
    System.out.println("Used Memory: "
            + (instance.totalMemory() - instance.freeMemory()) / mb);
    // Maximum available memory
    System.out.println("Max Memory: " + instance.maxMemory() / mb);
}

参考:こちら

于 2020-06-13T14:05:07.200 に答える
0

公正な空きメモリ:

maxMemory() - totalMemory() + freeMemory()

そして、それは次と同じになります:

maxMemory() - (used memory), where (used memory) = totalMemory() - freeMemory()

freeMemory()内の使用可能な空きメモリのみを提供しますtotalMemory()が、 はtotalMemory()まで拡張できますmaxMemory()

于 2021-07-01T08:13:37.497 に答える