29.JVM堆空間大小的設置(-Xms和-Xmx)和查看


 

1.堆空間大小的設置

  1. 設置堆空間大小的參數
    -Xms 用來設置堆空間(年輕代+老年代)的初始內存大小。
    -X 是jvm的運行參數
    ms 是memory start
    -Xmx 用來設置堆空間(年輕代+老年代)的最大內存大小。

  2. 默認堆空間的大小
    如果不設置堆空間的大小:那么
    初始堆內存大小:物理電腦內存大小 1 / 64。(64分之一)
    最大堆內存大小:物理電腦內存大小 1 / 4。(4分之一)

  3. 手動設置:-Xms600m -Xmx600m
    開發中建議將初始堆內存和最大的堆內存設置成相同的值。設置成相同的值避免了頻繁的回收和重新分配堆內存。
    在這里插入圖片描述

2.堆空間大小的查看

運行下面的Java程序:

package jvn;
public class HeapSpace {
    public static void main(String[] args) {
        //返回Java虛擬機中的堆內存總量
        long initialMemory = Runtime.getRuntime().totalMemory() / 1024 / 1024;
        //返回Java虛擬機試圖使用的最大堆內存量
        long maxMemory = Runtime.getRuntime().maxMemory() / 1024 / 1024;
        System.out.println("-Xms : " + initialMemory + "M");
        System.out.println("-Xmx : " + maxMemory + "M");
//        System.out.println("系統內存大小為:" + initialMemory * 64.0 / 1024 + "G");
//        System.out.println("系統內存大小為:" + maxMemory * 4.0 / 1024 + "G");
        try {
            Thread.sleep(1000000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
    1. 使用命令行的方式:jps / jstat -gc 進程id
      a) 打開命令行,輸入jps。查看當前運行的java程序的進程號。可以看到當前運行的java程序的進程號是20204
      在這里插入圖片描述
      b) 運行jstat -gc 22024。查看堆空間內存分配情況
      可以看到:堆內存分為了新生代(Survivor區和Eden區),老年代。圖中也標注除了元空間,但是它占的空間不屬於堆。
      OC:表示的是老年代分配的大小,OU是老年代被使用的大小。同理,其他的xC表示的某某區是分配空間的大小,xU表示的某某區是被使用的空間大小。
      在這里插入圖片描述
      1.總共的堆空間的大小為S1C + EC + OC = 2048 + 11264 + 248832 = 262144kb = 256Mb
      2.值得注意的一點是:Survivor區又分為s0區和s1區,這兩個區總有一個是空的,也就是不占空間。
      3.自己電腦的內存為16GB = 16384Mb。前面說過默認的初始堆的大小為物理內存大小的1/6416384Mb 除以 64 正好等於 256Mb。也反過來驗證了默認的初始堆的大小是物理內存大小的1/64
      4.細心的同學可能注意到,上面在計算堆空間的大小的時候,只計算了新生代和老年代。沒有加上元空間的數據。也從側面證明了起始堆空間只包含新生代和老年代,是不包含元空間的。

    2. 使用JVM參數 -XX:+PrintGCDetails
      選中Java程序鼠標右擊,在EclipseRun as -> Run Configurations加入VM參數。如下圖所示。
      在這里插入圖片描述
      點擊run,會得到如下的輸出:
      1.PSYoungGen:新生代為76288K
      2.新生代又分為eden65536K,和s0區(from space),s1區(to space)。
      3.ParOldGen:老年代175104K
      4.Metaspace:元空間

-Xms : 245M
-Xmx : 3630M
Heap
 PSYoungGen      total 76288K, used 3932K [0x000000076af00000, 0x0000000770400000, 0x00000007c0000000)
  eden space 65536K, 6% used [0x000000076af00000,0x000000076b2d7240,0x000000076ef00000)
  from space 10752K, 0% used [0x000000076f980000,0x000000076f980000,0x0000000770400000)
  to   space 10752K, 0% used [0x000000076ef00000,0x000000076ef00000,0x000000076f980000)
 ParOldGen       total 175104K, used 0K [0x00000006c0c00000, 0x00000006cb700000, 0x000000076af00000)
  object space 175104K, 0% used [0x00000006c0c00000,0x00000006c0c00000,0x00000006cb700000)
 Metaspace       used 2550K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 279K, capacity 386K, committed 512K, reserved 1048576K

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM