日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

java 内存回收参数_JVM常用参数(内存分配 内存回收日志)(七)

發布時間:2025/3/20 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 内存回收参数_JVM常用参数(内存分配 内存回收日志)(七) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

內存監控

-verbose:gc

測試代碼

public static voidmain(String[] args){

List classes=new ArrayList();int count=0;for(int i=0;true;i++){

classes.add(newClasses());if(classes.size()>10000){

count++;

classes.clear();

classes=new ArrayList();

System.out.println("標記為可回收");

}if(count>20){break;

}

}

}

1253K表示為回收前占用內存 903k表示回收后占用內存 可以發現標記回收后垃圾對象被成功回收, 3584為總內存 最后一個為回收時間

GC (Allocation Failure 表示為新生代回收

如果我們不標記為可回收會怎么樣

因為沒有標記為已回收 新生代from to 迭代15次或者滿了以后直接放到老年代 循環多次后老年代內存快滿了時觸發fullGC 因為都沒有標記為可回收所以每次回收后 占用內存沒有變化 最終導致內存溢出

-XX:+PrintGCDetails

-XX:+PrintGCDetails

打印每次gc的回收情況 程序運行結束后打印堆空間內存信息(包含內存溢出的情況)

[PSYoungGen: 512K->400K(1024K)] 表示年輕代占用空間 回收前和回收后

512K->400K(1536K) 表示為java堆的空間總內存的回收簽回收后內存

PsYoungGen?為新生代?總內存(total1024k )?使用(used 462K)?其中:

eden區? 512K

from區? 512K

to區? ? ? 521K

年輕代可用空間為1024可以發現eden+from+to大于1024? 新生代的內存為eden+from或者+to 因為年輕代采用復制算法 所以復制區域會有一塊兒重復的區域512 不能使用

ParOldGen?為老年代?總空間512K

Metaspace??PermGen永久代廢棄?jdk8使用?Metaspace(元空間) 替代

-XX:+PrintGCTimeStamps

打印每次gc的間隔的時間戳?full?gc為每次對新生代老年代以及整個空間做統一的回收?系統中應該盡量避免

產生fullgc的幾種情況? ?老年代空間不足? ? 持久代(元空間?或者jdk8的元空間)空間不足? 手動調用system.gc? 可以使用可以DisableExplicitGC來禁止

-XX:+TraceClassLoading

打印類加載情況

-XX:+PrintClassHistogram

打印每個類的實例的內存占用情況

通過按ctrl+Break 會打印 用的mac不知道咋么按? 哈哈哈

-XX:+PrintHeapAtGC

打印每次gc前后的內存情況

回收前年輕代eden區使用100% 老年代使用0% 回收后 eden區放到from區? ?老年代使用14%

Xloggc

配合上面的使用將上面的日志打印到指定文件

-Xloggc:/Users/liqiang/Desktop/logs/log.log

-XX:HeapDumpOnOutOfMemoryError

發生內存溢出將堆信息轉存起來?以便分析

-XX:HeapDumpPath為轉存位置? ? ?生成的文件使用JProfiler?打開?分析

也可以在內存溢出時執行腳本 比如發送郵件給系統管理員腳本

-XX:OnOutOfMemoryError ="sh ~/cleanup.sh"

內存分配參數

-Xmx -Xms堆的最大內存和最小內存(最小內存為初始內存 ,如果滿了將不斷擴容到最大內存)默認是物理內存的1/64

-Xmx20m -Xms20m? 則固定堆空間為20m(年輕代+老年代)

-XX:SurvivorRatio? Survivor(from-to)區和eden區的占比

例如?-XX:SurvivorRatio=5 則是5:1:1

-XX:SurvivorRatio=8:則是8:1:1

2560*(2/7)? 則是from和to的大小?剩下則是eden區的大小

-XMmn? 設置新生代的大小 (絕對值)

如-Xmn2m? 則設置新生為2m

-XX:NewRatio?新生代占老年代的比例

如果是4?則是1:4? ?如果是5則為1:5 默認為2

如:

雖然新生代空間為2m但是2m通過計算eden和from?to的的空間?但是真實新生代則是?eden+from或者to

-XX:PermSize ?-XX:MaxPermSize設置永久代的值和最大值

因為jdk8之后溢出了永久代?使用元空間代替

MaxMetaspaceSize? 元空間大小受制于操作系統內存

官方推薦堆空間內存分配

新生代占堆的3/8 ? ? 幸存代占新生代的1/10

棧空間內內存分配

-Xss

棧空間是保存變量的地址?所以棧空間的大小決定了方法調用的深度 。比如遞歸方法會產生大量的變量

設置棧大小為108k? 運行?幾秒后棧溢出

則報棧溢出

我們如果我們將參數改為10m?則會等很久才會內存溢出

內存分配參數默認值

-Xms(minimum?memory?size for pile?and heap)? ?默認情況下為機器內存的64分之一

-Xmx(maximum memory size for pile and heap)? ?默認情況下為機器內存的4分之一 等同于-XX:MaxHeapSize

-Xmn(年輕代的大小具體值)默認情況下堆內存的64分之一

-XX:NewRatio(年輕代占老年代的比例)默認為2(1:2)

-XX:SurvivorRatio(eden區與form to區的比例)默認為8(8:1:1)

jdk永久代大小設置?-XX:PermSize=64M -XX:MaxPermSize=128M

避免Concurrent Mode Failure

年老代剩余空間>=EDEN+SURVIROR,即:

(Xmx-Xmn)*(1-CMSInitiatingOccupancyFraction/100)>=(Xmn-Xmn/(SurvivorRatior+2))

Minor GC、Major GC和Full GC之間的區別

Minor GC

新生代 GC(Minor GC):指發生在新生代的垃圾收集動作,因為 Java 對象大多都具

備朝生夕滅的特性,所以 Minor GC 非常頻繁,一般回收速度也比較快。一般感知不到

Major GC

老年代回收

Full GC

整堆回收 一般會至少伴隨一次Minor GC?MajorGC 的速度一般會比 Minor GC 慢 10

倍以上。

總結

以上是生活随笔為你收集整理的java 内存回收参数_JVM常用参数(内存分配 内存回收日志)(七)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。