0

コマンド -Xms500m -Xmx139000m を使用して 104 Gp ヒープ メモリを取得しています

コア i5 プロセッサ 64 ビット Windows 7 Os を使用しています。500 Gp ハードディスク。4GB RAMのみ

  1. Jvmが104 GB(ヒープ)のメモリをどこから取得するのか知りたいだけですか?

  2. 出力にメモリ使用量が表示されませんか?

             `public class CPUusage {
         public static void main(String[] args)throws Exception
         {
    int mb = 1024*1024;
    int GB = 1024*1024*1024;
    /* Total number of processors or cores available to the JVM */    
    System.out.println("Available processors (cores): " +          Runtime.getRuntime().availableProcessors());
    /* Total amount of free memory available to the JVM */ 
    System.out.println("Free memory (MB): " +          Runtime.getRuntime().freeMemory()/mb);
    /* This will return Long.MAX_VALUE if there is no preset limit */  
    long maxMemory = Runtime.getRuntime().maxMemory()/GB;
    /* Maximum amount of memory the JVM will attempt to use */    
    System.out.println("Maximum memory (GB): " +          maxMemory);
    /* Total memory currently in use by the JVM */  
    System.out.println("Total memory (MB): " +          Runtime.getRuntime().totalMemory()/mb);
    /* Get a list of all filesystem roots on this system */
    File log=new File("D:\\log.txt");
    log.createNewFile();
    FileWriter fstream = new FileWriter(log);
    BufferedWriter out = new BufferedWriter(fstream);
      out.write("--------------------------------------------"+"\n\n");
    
    out.write("Available processors (cores): " +          Runtime.getRuntime().availableProcessors());
    out.newLine();
    out.write("Free memory (MB): " +          Runtime.getRuntime().freeMemory()/mb);
    out.newLine();
    out.write("Maximum memory (MB): " +          (maxMemory == Long.MAX_VALUE ? "no limit" : maxMemory));
    out.newLine();
    out.write("Total memory (MB): " +          Runtime.getRuntime().totalMemory()/mb); 
    out.newLine();
    
    File[] roots = log.listRoots();
    /* For each filesystem root, print some info */ 
    for (File root : roots) {
        System.out.println("-------------------------------------------");
        System.out.println("File system root: " + root.getAbsolutePath());
        System.out.println("Total space (GB): " + root.getTotalSpace()/GB);
        System.out.println("Free space (GB): " + root.getFreeSpace()/GB);
        System.out.println("Usable space (GB): " + root.getUsableSpace()/GB);
       out.write("-------------------------------------------");
        out.newLine();
        out.write("File system root: " + root.getAbsolutePath());
        out.newLine();
        out.write("Total space (GB): " + root.getTotalSpace()/GB);
        out.newLine();
        out.write("Free space (GB): " + root.getFreeSpace()/GB);
        out.newLine();
        out.write("Usable space (GB): " + root.getUsableSpace()/GB);
        out.newLine();
    
    }
      out.write("-------------------------------------------");
      out.newLine();
      out.close();
        }
        } 
    
               `
    

    そして、出力は

             `Available processors (cores): 4
              Free memory (MB): 476
              Maximum memory (GB): 104
              Total memory (MB): 479
              -------------------------------------------
              File system root: C:\
              Total space (GB): 97
              Free space (GB): 70
              Usable space (GB): 70
              -------------------------------------------
              File system root: D:\
              Total space (GB): 368
              Free space (GB): 366
              Usable space (GB): 366
    
              `
    
4

2 に答える 2

3

オプション「-Xms500m-Xmx139000m」は、「初期ヒープサイズ500Mbを割り当て、必要に応じて最大139GBまで拡張できるようにする」ことを意味します。

あなたがあなたのプログラムから見ている出力はそれと完全に一致しています。プログラムが実行された時点では、ヒープは139Gbに達していませんでした。そして、それは決してそのレベルに達することはないかもしれません。また、オペレーティングシステムがJVMに要求した場合に、JVMに提供できるリソースによっては、そのレベルに到達できない場合もあります。

本当にJVMに139Gbヒープを使用させたい場合は、初期ヒープサイズとして139Gbも設定してみてください。例:「-Xms139000m-Xmx139000m」。しかし、特に物理RAMがそれほど多くない場合は、これはおそらく良い考えではありません。

于 2012-08-14T05:54:21.313 に答える
0

仮想メモリとは、アドレス空間が予約されているときではなく、使用時にRAMが割り当てられることを意味します。実際に104GBを使用する場合、OSはスワップ(ディスク上のファイルまたはパーティション)を使用して、物理的に持っているよりも多くのRAMの錯覚を維持します。

于 2012-08-14T05:53:36.480 に答える