JVM堆内存分配
堆內存配置
-Xms,設置程序啟動時,初始堆大小
-Xms,設置程序啟動時,最大堆大小
-XX:+PrintGC,打印GC日志信息
-XX:+UseSerialGC,配置串行回收器
-XX:+PrintGCDetails,查詢各區詳細信息
-XX:+PrintCommandLineFlags,輸入詳細參數配置
測試
package com.bjsxt.base001;public class Test01 {public static void main(String[] args) {// -Xms5m -Xmx20m -XX:+PrintGCDetails -XX:+UseSerialGC// -XX:+PrintCommandLineFlags// 查看GC信息System.out.println("max memory:" + Runtime.getRuntime().maxMemory());System.out.println("free memory:" + Runtime.getRuntime().freeMemory());System.out.println("total memory:" + Runtime.getRuntime().totalMemory());byte[] b1 = new byte[1 * 1024 * 1024];System.out.println("分配了1M");System.out.println("max memory:" + Runtime.getRuntime().maxMemory());System.out.println("free memory:" + Runtime.getRuntime().freeMemory());System.out.println("total memory:" + Runtime.getRuntime().totalMemory());byte[] b2 = new byte[4 * 1024 * 1024];System.out.println("分配了4M");System.out.println("max memory:" + Runtime.getRuntime().maxMemory());System.out.println("free memory:" + Runtime.getRuntime().freeMemory());System.out.println("total memory:" + Runtime.getRuntime().totalMemory());}}配置方式
運行
輸出信息
第一行,為打印配置參數
先分配了1M,空閑內存,減少了1M
又分配了4M,空閑控件不夠,進行了一次GC
重新分配了可用空間
GC信息
[GC (Allocation Failure) [DefNew: 990K->128K(1152K), 0.0020815 secs][Tenured: 1592K->1719K(4864K), 0.0018109 secs] 2014K->1719K(6016K), [Metaspace: 2800K->2800K(1056768K)], 0.0043690 secs] [Times: user=0.00 sys=0.02, real=0.00 secs]箭頭左邊,表示回收之前大小,990K
箭頭右邊,表示回收之后大小,128K
花費的時間
Times耗時
包括用戶耗時、系統耗時、真實耗時
三個分別表示
新生代,包括伊甸園區、from區、to區
老年區
永久區
Total
總內存的大小
括號中的三個參數
第一個,表示內存的起始位置
第二個,表示內存的結束位置
Total=結束位置-起始位置
2304K =0x00000000fee70000- 0x00000000fec00000
總結
- 上一篇: JVM方法区内存分配
- 下一篇: JVM堆内存溢出