版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第JVM調(diào)優(yōu)OutOfMemoryError異常分析目錄1.Java堆溢出1.1設(shè)置JVM參數(shù)1.2測(cè)試代碼1.3運(yùn)行OOM日志2.Java棧、本地方法棧溢出2.1設(shè)置JVM參數(shù)2.2測(cè)試代碼2.3運(yùn)行OOM日志2.4Java虛擬機(jī)OOM異常3.Java運(yùn)行常量池溢出3.1設(shè)置JVM參數(shù)-注意區(qū)分jdk版本3.2測(cè)試代碼3.3運(yùn)行OOM日志4.Java方法區(qū)溢出-jdk84.1設(shè)置JVM參數(shù)4.2測(cè)試代碼4.3運(yùn)行OOM日志5.本機(jī)直接內(nèi)存溢出5.1設(shè)置JVM參數(shù)5.2測(cè)試代碼5.3運(yùn)行OOM日志
1.Java堆溢出
1.1設(shè)置JVM參數(shù)
-verbose:gc-Xms20M-Xmx20M-Xmn10M-XX:+PrintGC-XX:+PrintGCDetails-XX:+HeapDumpOnOutOfMemoryError-XX:SurvivorRatio=8
-Xmx20m:設(shè)置JVM最大可用內(nèi)存為20M。-Xms20m:設(shè)置JVM促使內(nèi)存為20m。此值可以設(shè)置與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配內(nèi)-Xmn10m:設(shè)置年輕代大小為10m-XX:SurvivorRatio=8Eden區(qū)和Survivor區(qū)間比例是8:1,所以分配一下就是eden8m,fromspace1m,tospace1m加起來(lái)10m
1.2測(cè)試代碼
packagecom.jzj.jvmtest.oomtest;
importjava.util.ArrayList;
importjava.util.List;
*堆溢出,只要不停的新建對(duì)象,就會(huì)堆溢出
publicclassHeapOOM{
publicstaticvoidmain(String[]args){
System.out.print("最大內(nèi)存:");
System.out.println(Runtime.getRuntime().maxMemory()/1024/1024+"MB");
System.out.print("可用內(nèi)存:");
System.out.println(Runtime.getRuntime().freeMemory()/1024/1024+"MB");
System.out.print("已使用內(nèi)存:");
System.out.println(Runtime.getRuntime().totalMemory()/1024/1024+"MB");
ListHeapOOMlist=newArrayList();
while(true){
list.add(newHeapOOM());
1.3運(yùn)行OOM日志
可以看到日志java.lang.OutOfMemoryError:JavaheapspaceHeapSpace就是堆溢出
最大內(nèi)存:19MB
可用內(nèi)存:16MB
已使用內(nèi)存:19MB
[GC(AllocationFailure)[PSYoungGen:8192K-1000K(9216K)]8192K-4533K(19456K),0.0044438secs][Times:user=0.00sys=0.00,real=0.01secs]
[GC(AllocationFailure)--[PSYoungGen:9192K-9192K(9216K)]12725K-19427K(19456K),0.0091278secs][Times:user=0.11sys=0.00,real=0.01secs]
[FullGC(Ergonomics)[PSYoungGen:9192K-0K(9216K)][ParOldGen:10235K-10221K(10240K)]19427K-10221K(19456K),[Metaspace:3495K-3495K(1056768K)],0.1549254secs][Times:user=0.69sys=0.02,real=0.16secs]
[FullGC(Ergonomics)[PSYoungGen:8192K-7167K(9216K)][ParOldGen:10221K-8971K(10240K)]18413K-16138K(19456K),[Metaspace:3496K-3496K(1056768K)],0.1722236secs][Times:user=1.30sys=0.00,real=0.17secs]
[FullGC(Ergonomics)[PSYoungGen:7652K-7604K(9216K)][ParOldGen:8971K-8971K(10240K)]16624K-16575K(19456K),[Metaspace:3496K-3496K(1056768K)],0.1296002secs][Times:user=1.25sys=0.00,real=0.13secs]
[FullGC(AllocationFailure)[PSYoungGen:7604K-7604K(9216K)][ParOldGen:8971K-8953K(10240K)]16575K-16557K(19456K),[Metaspace:3496K-3496K(1056768K)],0.1372692secs][Times:user=1.27sys=0.00,real=0.14secs]
java.lang.OutOfMemoryError:Javaheapspace
Dumpingheaptojava_pid28084.hprof...
Heapdumpfilecreated[28363283bytesin0.058secs]
Heap
PSYoungGentotal9216K,used7794K[0x00000000ff600000,0x0000000100000000,0x0000000100000000)
edenspace8192K,95%used[0x00000000ff600000,0x00000000ffd9c8a8,0x00000000ffe00000)
fromspace1024K,0%used[0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
tospace1024K,0%used[0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
ParOldGentotal10240K,used8953K[0x00000000fec00000,0x00000000ff600000,0x00000000ff600000)
objectspace10240K,87%used[0x00000000fec00000,0x00000000ff4be5a0,0x00000000ff600000)
Metaspaceused3527K,capacity4500K,committed4864K,reserved1056768K
classspaceused385K,capacity388K,committed512K,reserved1048576K
Exceptioninthreadmainjava.lang.OutOfMemoryError:Javaheapspace
atjava.util.Arrays.copyOf(Arrays.java:3210)
atjava.util.Arrays.copyOf(Arrays.java:3181)
atjava.util.ArrayList.grow(ArrayList.java:265)
atjava.util.ArrayList.ensureExplicitCapacity(ArrayList.java:239)
atjava.util.ArrayList.ensureCapacityInternal(ArrayList.java:231)
atjava.util.ArrayList.add(ArrayList.java:462)
atcom.jzj.jvmtest.oomtest.HeapOOM.main(HeapOOM.java:20)
Processfinishedwithexitcode1
2.Java棧、本地方法棧溢出
2.1設(shè)置JVM參數(shù)
-verbose:gc-Xms20M-Xmx20M-Xmn10M-XX:+PrintGC-XX:+PrintGCDetails-XX:+HeapDumpOnOutOfMemoryError-XX:SurvivorRatio=8-Xss128k
這次最后加了一個(gè)-Xss設(shè)置每個(gè)線(xiàn)程的堆棧大小
虛擬機(jī)擴(kuò)展棧時(shí),如果棧深度大于虛擬機(jī)允許最大深度,就會(huì)出現(xiàn)StackOverflowError異常如果在擴(kuò)展棧時(shí),需要的內(nèi)存空間不夠,那么就會(huì)出現(xiàn)OutOfMemoryError就是OOM異常
2.2測(cè)試代碼
packagecom.jzj.jvmtest.oomtest;
*棧溢出,只要不停的新建對(duì)象,循環(huán)遞歸,超出棧容量限制就會(huì)OOM
*1.棧深入超出限制,stackOverflowError
*2.棧擴(kuò)展時(shí)候,內(nèi)存不夠,導(dǎo)致OOM異常
publicclassStackOOM{
*初始化棧的深度
privateintstackLength=1;
*循環(huán)去增加棧的深度
publicvoidstackLeak(){
stackLength++;
stackLeak();
publicstaticvoidmain(String[]args){
System.out.print("最大內(nèi)存:");
System.out.println(Runtime.getRuntime().maxMemory()/1024/1024+"MB");
System.out.print("可用內(nèi)存:");
System.out.println(Runtime.getRuntime().freeMemory()/1024/1024+"MB");
System.out.print("已使用內(nèi)存:");
System.out.println(Runtime.getRuntime().totalMemory()/1024/1024+"MB");
StackOOMoom=newStackOOM();
try{
oom.stackLeak();
}catch(Throwablee){
System.out.println("stacklength============"+oom.stackLength);
throwe;
2.3運(yùn)行OOM日志
可以看到日志Exceptioninthreadmainjava.lang.StackOverflowErrorStackOverflowError就是虛擬機(jī)棧,可以看到棧深度在995的時(shí)候就發(fā)生了異常,超出了虛擬機(jī)棧的深度,拋出異常
最大內(nèi)存:19MB
可用內(nèi)存:16MB
已使用內(nèi)存:19MB
stacklength============995
Heap
PSYoungGentotal9216K,used4158K[0x00000000ff600000,0x0000000100000000,0x0000000100000000)
edenspace8192K,50%used[0x00000000ff600000,0x00000000ffa0fae8,0x00000000ffe00000)
fromspace1024K,0%used[0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
tospace1024K,0%used[0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
ParOldGentotal10240K,used0K[0x00000000fec00000,0x00000000ff600000,0x00000000ff600000)
objectspace10240K,0%used[0x00000000fec00000,0x00000000fec00000,0x00000000ff600000)
Metaspaceused3558K,capacity4500K,committed4864K,reserved1056768K
classspaceused385K,capacity388K,committed512K,reserved1048576K
Exceptioninthreadmainjava.lang.StackOverflowError
atcom.jzj.jvmtest.oomtest.StackOOM.stackLeak(StackOOM.java:19)
atcom.jzj.jvmtest.oomtest.StackOOM.stackLeak(StackOOM.java:20)
atcom.jzj.jvmtest.oomtest.StackOOM.stackLeak(StackOOM.java:20)
atcom.jzj.jvmtest.oomtest.StackOOM.stackLeak(StackOOM.java:20)
atcom.jzj.jvmtest.oomtest.StackOOM.main(StackOOM.java:34)
Processfinishedwithexitcode1
2.4Java虛擬機(jī)OOM異常
理論上要想虛擬機(jī)棧拋出OOM,在多線(xiàn)程的情況下,可以不停的新建線(xiàn)程來(lái)實(shí)現(xiàn)OOM
但是這樣通過(guò)多個(gè)線(xiàn)程創(chuàng)建的OOM異常和棧空間是否足夠大沒(méi)有直接關(guān)系?準(zhǔn)確來(lái)說(shuō)為每個(gè)線(xiàn)程棧分配的空間越大,反而越容易長(zhǎng)身OOMwhy?為什么為每個(gè)線(xiàn)程分配的空間越大,越容易OOM呢?
分析:
假設(shè)操作系統(tǒng)有2G內(nèi)存虛擬機(jī)可以通過(guò)參數(shù)來(lái)控制虛擬機(jī)堆和方法區(qū)允許內(nèi)存的最大值堆最大值-Xmx控制,方法區(qū)永久區(qū)-MaxPermSize最大方法區(qū)容量控制方法區(qū)大小2GB減去堆大小,減去方法區(qū)大小,剩下的內(nèi)存就由java虛擬機(jī)棧與本地方法棧共享瓜分每個(gè)線(xiàn)程分配的空間越大,那么系統(tǒng)可以操作的線(xiàn)程數(shù)就越少,那么新建線(xiàn)程就越容易超標(biāo),造成OOM
!!!!!!!!為什么在這里我不代碼演示一下創(chuàng)建線(xiàn)程導(dǎo)致oom
因?yàn)镴ava的線(xiàn)程時(shí)映射到操作系統(tǒng)內(nèi)核線(xiàn)程上的,你創(chuàng)建多的線(xiàn)程,執(zhí)行這種代碼,容易造成操作系統(tǒng)假死,電腦死機(jī),所以謹(jǐn)慎操作,這里就不演示這種OOM了
3.Java運(yùn)行常量池溢出
3.1設(shè)置JVM參數(shù)-注意區(qū)分jdk版本
-verbose:gc-Xms20M-Xmx20M-Xmn10M-XX:+PrintGC-XX:+PrintGCDetails-XX:+HeapDumpOnOutOfMemoryError-XX:SurvivorRatio=8-XX:PermSize=5M-XX:MaxPermSize=5M
這里新加了參數(shù)-XX:PermSize=5M-XX:MaxPermSize=5M來(lái)控制方法區(qū)大小
-XX:PermSize=5M:設(shè)置方法區(qū)大小。1.6JDK-XX:MaxPermSize=5M:設(shè)置方法區(qū)最大值。1.6JDK
!!!!!!注意這個(gè)測(cè)試方法用的是String.valueOf(i++).intern()這個(gè)方法在jdk1.6沒(méi)問(wèn)題,是能夠拋出PermSpaceOOM的因?yàn)?/p>
在JDK1.6及之前的版本中,由于常量池分配在永久代內(nèi),我們可以通過(guò)-XX:PermSize和-XX:MaxPermSize限制方法區(qū)大小,從而間接限制其中常量池的容量但是在JDK1.8運(yùn)行這段程序不會(huì)得到相同的結(jié)果,而是出現(xiàn)以下的提示信息,這是因?yàn)檫@兩個(gè)參數(shù)已經(jīng)不在JDK1.7中使用了。提示錯(cuò)誤JavaHotSpot(TM)64-BitServerVMwarning:ignoringoptionPermSize=5M;supportwasremovedin8.0提示錯(cuò)誤JavaHotSpot(TM)64-BitServerVMwarning:ignoringoptionMaxPermSize=5M;supportwasremovedin8.0
不同的版本,這段代碼拋出不同的異常
VMArgs(jdk1.6):-XX:PermSize=10M-XX:MaxPermSize=10M
VMArgs(jdk1.7):-Xms10m-Xmx10m-XX:+HeapDumpOnOutOfMemoryError
VMArgs(jdk1.8):-XX:MetaspaceSize=10m-XX:MaxMetaspaceSize=10m
Exception(jdk1.6):java.lang.OutOfMemoryError:PermGenspace
Exception(jdk1.7):java.lang.OutOfMemoryError:Javaheapspace
Exception(jdk1.8):java.lang.OutOfMemoryError:GCoverheadlimitexceeded
3.2測(cè)試代碼
所以為了在1.8的jdk中,測(cè)試常量池溢出,我們?cè)撊绾文M呢?jdk1.8使用元空間(Metaspace)替代了永久代(PermSize),因此我們可以在1.8中指定Metaspace的大小模擬測(cè)試
!!!!JDK1.8這里新加了參數(shù)來(lái)控制方法區(qū)大小
-XX:MetaspaceSize=5m,初始空間大小,達(dá)到該值就會(huì)觸發(fā)垃圾收集進(jìn)行類(lèi)型卸載,同時(shí)GC會(huì)對(duì)該值進(jìn)行調(diào)整:如果釋放了大量的空間,-XX:MaxMetaspaceSize=5m,最大空間,默認(rèn)是沒(méi)有限制的。
/**
*設(shè)置方法區(qū)及常量池OOM溢出
*方法區(qū)中運(yùn)行時(shí)常量池溢出
*VMArgs(jdk1.6):-XX:PermSize=10M-XX:MaxPermSize=10M
*VMArgs(jdk1.7):-Xms30m-Xmx30m-XX:+HeapDumpOnOutOfMemoryError
*VMArgs(jdk1.8):-XX:MetaspaceSize=10m-XX:MaxMetaspaceSize=10m
*Exception(jdk1.6):java.lang.OutOfMemoryError:PermGenspace
*Exception(jdk1.7):java.lang.OutOfMemoryError:Javaheapspace
*Exception(jdk1.8):java.lang.OutOfMemoryError:GCoverheadlimitexceeded
publicclassConstantOOM{
publicstaticvoidmain(String[]args){
System.out.print("最大內(nèi)存:");
System.out.println(Runtime.getRuntime().maxMemory()/1024/1024+"MB");
System.out.print("可用內(nèi)存:");
System.out.println(Runtime.getRuntime().freeMemory()/1024/1024+"MB");
System.out.print("已使用內(nèi)存:");
System.out.println(Runtime.getRuntime().totalMemory()/1024/1024+"MB");
//使用List,保持常量池的使用,避免FullGC回收常量池的行為
ListStringstaticList=newArrayList();
//5M的PermSize讓Listfor循環(huán)添加變量讓常量池瘋狂的添加新的對(duì)象
longi=0L;
while(true){
//使用Sern調(diào)用”ab”.intern()方法的時(shí)候會(huì)返回”ab“
//但是這個(gè)方法會(huì)首先檢查字符串池中是否有”ab”這個(gè)字符串,如果存在則返回這個(gè)字符串的引用
//否則就將這個(gè)字符串添加到字符串池中,然會(huì)返回這個(gè)字符串的引用
staticList.add(String.valueOf(i++).intern());
3.3運(yùn)行OOM日志
可以看到日志Exceptioninthreadmainjava.lang.OutOfMemoryError:GCoverheadlimitexceeded并不是MetaSpaceOOM的日志,所以JDK1.8中,上面的代碼是沒(méi)法實(shí)現(xiàn)元空間的內(nèi)存溢出的
最大內(nèi)存:19MB
可用內(nèi)存:16MB
已使用內(nèi)存:19MB
[GC(AllocationFailure)[PSYoungGen:8192K-1016K(9216K)]8192K-5564K(19456K),0.0041671secs][Times:user=0.00sys=0.00,real=0.00secs]
[GC(AllocationFailure)--[PSYoungGen:9208K-9208K(9216K)]13756K-19446K(19456K),0.0086760secs][Times:user=0.01sys=0.00,real=0.01secs]
[FullGC(Ergonomics)[PSYoungGen:9208K-2482K(9216K)][ParOldGen:10237K-10179K(10240K)]19446K-12662K(19456K),[Metaspace:3497K-3497K(1056768K)],0.1127624secs][Times:user=0.41sys=0.00,real=0.11secs]
[FullGC(Ergonomics)[PSYoungGen:8192K-7167K(9216K)][ParOldGen:10179K-10165K(10240K)]18371K-17332K(19456K),[Metaspace:3498K-3498K(1056768K)],0.1072663secs][Times:user=0.63sys=0.00,real=0.11secs]
......
[FullGC(Ergonomics)[PSYoungGen:8192K-8192K(9216K)][ParOldGen:10199K-10199K(10240K)]18391K-18391K(19456K),[Metaspace:3502K-3502K(1056768K)],0.0641831secs][Times:user=0.63sys=0.00,real=0.06secs]
[FullGC(Ergonomics)[PSYoungGen:8192K-8192K(9216K)][ParOldGen:10201K-10201K(10240K)]18393K-18393K(19456K),[Metaspace:3502K-3502K(1056768K)],0.0631814secs][Times:user=0.48sys=0.00,real=0.06secs]
[FullGC(Ergonomics)[PSYoungGen:8192K-8192K(9216K)][ParOldGen:10202K-10202K(10240K)]18394K-18394K(19456K),[Metaspace:3502K-3502K(1056768K)],0.0626523secs][Times:user=0.48sys=0.00,real=0.06secs]
java.lang.OutOfMemoryError:GCoverheadlimitexceeded
Dumpingheaptojava_pid10140.hprof...
Heapdumpfilecreated[24293672bytesin0.065secs]
[FullGC(Ergonomics)[PSYoungGen:8192K-0K(9216K)][ParOldGen:10238K-763K(10240K)]18430K-763K(19456K),[Metaspace:3522K-3522K(1056768K)],0.0068815secs][Times:user=0.16sys=0.00,real=0.01secs]
Heap
PSYoungGentotal9216K,used273K[0x00000000ff600000,0x0000000100000000,0x0000000100000000)
edenspace8192K,3%used[0x00000000ff600000,0x00000000ff6444e0,0x00000000ffe00000)
fromspace1024K,0%used[0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
tospace1024K,0%used[0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
ParOldGentotal10240K,used763K[0x00000000fec00000,0x00000000ff600000,0x00000000ff600000)
objectspace10240K,7%used[0x00000000fec00000,0x00000000fecbeca8,0x00000000ff600000)
Metaspaceused3616K,capacity4540K,committed4864K,reserved1056768K
classspaceused394K,capacity428K,committed512K,reserved1048576K
Exceptioninthreadmainjava.lang.OutOfMemoryError:GCoverheadlimitexceeded
atjava.lang.Integer.toString(Integer.java:403)
atjava.lang.String.valueOf(String.java:3099)
atcom.jzj.jvmtest.oomtest.PermOOM.main(PermOOM.java:28)
JavaHotSpot(TM)64-BitServerVMwarning:ignoringoptionPermSize=5M;supportwasremovedin8.0
JavaHotSpot(TM)64-BitServerVMwarning:ignoringoptionMaxPermSize=5M;supportwasremovedin8.0
Processfinishedwithexitcode1
4.Java方法區(qū)溢出-jdk8
4.1設(shè)置JVM參數(shù)
所以為了在1.8的jdk中,測(cè)試方法區(qū)溢出,我們?cè)撊绾文M呢?jdk1.8使用元空間(Metaspace)替代了永久代(PermSize),因此我們可以在1.8中指定Metaspace的大小模擬測(cè)試,我們用
!!!!JDK1.8這里新加了參數(shù)來(lái)控制方法區(qū)大小
-XX:MetaspaceSize=5m,初始空間大小,達(dá)到該值就會(huì)觸發(fā)垃圾收集進(jìn)行類(lèi)型卸載,同時(shí)GC會(huì)對(duì)該值進(jìn)行調(diào)整:如果釋放了大量的空間,-XX:MaxMetaspaceSize=5m,最大空間,默認(rèn)是沒(méi)有限制的。
-verbose:gc-Xms20M-Xmx20M-Xmn10M-XX:+PrintGC-XX:+PrintGCDetails-XX:+HeapDumpOnOutOfMemoryError-XX:MetaspaceSize=10m-XX:MaxMetaspaceSize=10m
這里新加了參數(shù)-XX:MetaspaceSize=10M-XX:MaxMetaspaceSize=10M來(lái)控制方法區(qū)大小
-XX:MetaspaceSize=10m,初始空間大小,達(dá)到該值就會(huì)觸發(fā)垃圾收集進(jìn)行類(lèi)型卸載,同時(shí)GC會(huì)對(duì)該值進(jìn)行調(diào)整:如果釋放了大量的空間,-XX:MaxMetaspaceSize=10m,最大空間,默認(rèn)是沒(méi)有限制的。
方法區(qū)存的什么?類(lèi)信息,常量,靜態(tài)變量,我們就用CGLib代理來(lái)創(chuàng)建類(lèi),使得方法區(qū)內(nèi)存溢出
4.2測(cè)試代碼
packagecom.jzj.jvmtest.oomtest;
importxy.Enhancer;
importxy.MethodInterceptor;
*方法區(qū)內(nèi)存溢出,方法區(qū)存放的是類(lèi),靜態(tài)常量,變量信息
*所以我們就用CGLIB瘋狂的創(chuàng)建類(lèi)就可以達(dá)到OOM了
publicclassMethodAreaOOMextendsClassLoader{
publicstaticvoidmain(String[]args){
System.out.print("最大內(nèi)存:");
System.out.println(Runtime.getRuntime().maxMemory()/1024/1024+"MB");
System.out.print("可用內(nèi)存:");
System.out.println(Runtime.getRuntime().freeMemory()/1024/1024+"MB");
System.out.print("已使用內(nèi)存:");
System.out.println(Runtime.getRuntime().totalMemory()/1024/1024+"MB");
intcount=0;
try{
for(inti=0;i10000;i++){
Enhancerenhancer=newEnhancer();
enhancer.setSuperclass(MethodAreaOOM.class);
enhancer.setUseCache(false);
enhancer.setCallback((MethodInterceptor)(o,method,objects,methodProxy)-methodProxy.invokeSuper(o,args));
//cglib創(chuàng)建類(lèi)文件
enhancer.create();
count=i;
}catch(Throwablee){
System.out.println("****count="+count);
e.printStackTrace();
4.3運(yùn)行OOM日志
可以看到日志java.lang.OutOfMemoryError:Metaspace就是員工間方法區(qū)的OOM溢出
C:\ProgramFiles\Java\jdk1.8.0_181\bin\java.exe-verbose:gc-Xms20M-Xmx20M-Xmn10M-XX:+PrintGC-XX:+PrintGCDetails-XX:+HeapDumpOnOutOfMemoryError-XX:MetaspaceSize=10m-XX:MaxMetaspaceSize=10m-javaagent:E:\ProgramFiles\JetBrains\IntelliJIDEA2025.3.4\lib\idea_rt.jar=59628:E:\ProgramFiles\JetBrains\IntelliJIDEA2025.3.4\bin-Dfile.encoding=UTF-8-classpathC:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\charsets.jar;C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\deploy.jar;C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\ext\access-bridge-64.jar;C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\ext\cldrdata.jar;C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\ext\dnsns.jar;C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\ext\jaccess.jar;C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\ext\jfxrt.jar;C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\ext\localedata.jar;C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\ext\nashorn.jar;C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\ext\sunec.jar;C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\ext\sunjce_provider.jar;C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\ext\sunmscapi.jar;C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\ext\sunpkcs11.jar;C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\ext\zipfs.jar;C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\javaws.jar;C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\jce.jar;C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\jfr.jar;C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\jfxswt.jar;C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\jsse.jar;C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\management-agent.jar;C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\plugin.jar;C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\resources.jar;C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\rt.jar;E:\myworkspace\distribute\jvmtest\target\classes;E:\MavenRepository\org\springframework\boot\spring-boot-starter-web\2.5.4\spring-boot-starter-web-2.5.4.jar;E:\MavenRepository\org\springframework\boot\spring-boot-starter\2.5.4\spring-boot-starter-2.5.4.jar;E:\MavenRepository\org\springframework\boot\spring-boot\2.5.4\spring-boot-2.5.4.jar;E:\MavenRepository\org\springframework\boot\spring-boot-autoconfigure\2.5.4\spring-boot-autoconfigure-2.5.4.jar;E:\MavenRepository\org\springframework\boot\spring-boot-starter-logging\2.5.4\spring-boot-starter-logging-2.5.4.jar;E:\MavenRepository\ch\qos\logback\logback-classic\1.2.5\logback-classic-1.2.5.jar;E:\MavenRepository\ch\qos\logback\logback-core\1.2.5\logback-core-1.2.5.jar;E:\MavenRepository\org\apache\logging\log4j\log4j-to-slf4j\2.14.1\log4j-to-slf4j-2.14.1.jar;E:\MavenRepository\org\apache\logging\log4j\log4j-api\2.14.1\log4j-api-2.14.1.jar;E:\MavenRepository\org\slf4j\jul-to-slf4j\1.7.32\jul-to-slf4j-1.7.32.jar;E:\MavenRepository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;E:\MavenRepository\org\yaml\snakeyaml\1.28\snakeyaml-1.28.jar;E:\MavenRepository\org\springframework\boot\spring-boot-starter-json\2.5.4\spring-boot-starter-json-2.5.4.jar;E:\MavenRepository\com\fasterxml\jackson\core\jackson-databind\2.12.4\jackson-databind-2.12.4.jar;E:\MavenRepository\com\fasterxml\jackson\core\jackson-annotations\2.12.4\jackson-annotations-2.12.4.jar;E:\MavenRepository\com\fasterxml\jackson\core\jackson-core\2.12.4\jackson-core-2.12.4.jar;E:\MavenRepository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.12.4\jackson-datatype-jdk8-2.12.4.jar;E:\MavenRepository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.12.4\jackson-datatype-jsr310-2.12.4.jar;E:\MavenRepository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.12.4\jackson-module-parameter-names-2.12.4.jar;E:\MavenRepository\org\springframework\boot\spring-boot-starter-tomcat\2.5.4\spring-boot-starter-tomcat-2.5.4.jar;E:\MavenRepository\org\apache\tomcat\embed\tomcat-embed-core\9.0.52\tomcat-embed-core-9.0.52.jar;E:\MavenRepository\org\apache\tomcat\embed\tomcat-embed-el\9.0.52\tomcat-embed-el-9.0.52.jar;E:\MavenRepository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.52\tomcat-embed-websocket-9.0.52.jar;E:\MavenRepository\org\springframework\spring-web\5.3.9\spring-web-5.3.9.jar;E:\MavenRepository\org\springframework\spring-beans\5.3.9\spring-beans-5.3.9.jar;E:\MavenRepository\org\springframework\spring-webmvc\5.3.9\spring-webmvc-5.3.9.jar;E:\MavenRepository\org\springframework\spring-aop\5.3.9\spring-aop-5.3.9.jar;E:\MavenRepository\org\springframework\spring-context\5.3.9\spring-context-5.3.9.jar;E:\MavenRepository\org\springframework\spring-expression\5.3.9\spring-expression-5.3.9.jar;E:\MavenRepository\org\slf4j\slf4j-api\1.7.32\slf4j-api-1.7.32.jar;E:\MavenRepository\org\springframework\spring-core\5.3.9\spring-core-5.3.9.jar;E:\MavenRepository\org\springframework\spring-jcl\5.3.9\spring-jcl-5.3.9.jarcom.jzj.jvmtest.oomtest.MethodAreaOOM
最大內(nèi)存:19MB
可用內(nèi)存:16MB
已使用內(nèi)存:19MB
[GC(AllocationFailure)[PSYoungGen:8192K-1000K(9216K)]8192K-1709K(19456K),0.0013246secs][Times:user=0.00sys=0.00,real=0.00secs]
[GC(AllocationFailure)[PSYoungGen:9192K-1000K(9216K)]9901K-2255K(19456K),0.0011901secs][Times:user=0.00sys=0.00,real=0.00secs]
...
[FullGC(MetadataGCThreshold)[PSYoungGen:320K-0K(8192K)][ParOldGen:5896K-3747K(10240K)]6216K-3747K(18432K),[Metaspace:10049K-10049K(1058816K)],0.0380225secs][Times:user=0.28sys=0.00,real=0.04secs]
[GC(Lastditchcollection)[PSYoungGen:0K-0K(8192K)]3747K-3747K(18432K),0.0003694secs][Times:user=0.00sys=0.00,real=0.00secs]
[FullGC(Lastditchcollection)[PSYoungGen:0K-0K(8192K)][ParOldGen:3747K-2210K(10240K)]3747K-2210K(18432K),[Metaspace:10049K-10042K(1058816K)],0.0231525secs][Times:user=0.16sys=0.00,real=0.02secs]
java.lang.OutOfMemoryError:Metaspace
Dumpingheaptojava_pid5592.hprof...
Heapdumpfilecreated[4525675bytesin0.014secs]
[GC(MetadataGCThreshold)[PSYoungGen:122K-96K(8192K)]2333K-2306K(18432K),0.0005350secs][Times:user=0.00sys=0.00,real=0.00secs]
[FullGC(MetadataGCThreshold)[PSYoungGen:96K-0K(8192K)][ParOldGen:2210K-2210K(10240K)]2306K-2210K(18432K),[Metaspace:10043K-10043K(1058816K)],0.0095820secs][Times:user=0.02sys=0.00,real=0.01secs]
[GC(Lastditchcollection)[PSYoungGen:0K-0K(8192K)]2210K-2210K(18432K),0.0003715secs][Times:user=0.00sys=0.00,real=0.00secs]
[FullGC(Lastditchcollection)[PSYoungGen:0K-0K(8192K)][ParOldGen:2210K-2210K(10240K)]2210K-2210K(18432K),[Metaspace:10043K-10043K(1058816K)],0.0043271secs][Times:user=0.00sys=0.00,real=0.00secs]
****count=208
Heap
PSYoungGentotal8192K,used246K[0x00000000ff600000,0x0000000100000000,0x0000000100000000)
edenspace6144K,4%used[0x00000000ff600000,0x00000000ff63d878,0x00000000ffc00000)
fromspace2048K,0%used[0x00000000ffc00000,0x00000000ffc00000,0x00000000ffe00000)
tospace2048K,0%used[0x00000000ffe00000,0x00000000ffe00000,0x0000000100000000)
ParOldGentotal10240K,used2210K[0x00000000fec00000,0x00000000ff600000,0x00000000ff600000)
objectspace10240K,21%used[0x00000000fec00000,0x00000000fee28ad8,0x00000000ff600000)
Metaspaceused10074K,capacity10174K,committed10240K,reserved1058816K
classspaceused787K,capacity851K,committed896K,reserved1048576K
java.lang.OutOfMemoryError:Metaspace
atorg.springframework.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:557)
atorg.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:363)
atxy.Enhancer.generate(Enhancer.java:585)
atorg.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:131)
atorg.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:319)
atxy.Enhancer.createHelper(Enhancer.java:572)
atxy.Enhancer.create(Enhancer.java:387)
atcom.jzj.jvmtest.oomtest.MethodAreaOOM.main(MethodAreaOOM.java:28)
Processfinishedwithexitcode0
5.本機(jī)直接內(nèi)存溢出
5.1設(shè)置JVM參數(shù)
-verbose:gc-Xms20M-Xmx20M-Xmn10M-XX:+PrintGC-XX:+PrintGCDetails-XX:+HeapDumpOnOutOfMemoryError-XX:SurvivorRatio=8-XX:MaxDirectMemorySize=5M
這里新加了參數(shù)-XX:MaxDirectMemorySize=5M來(lái)控制本地直接內(nèi)存的大小
-XX:MaxDirectMemorySize=10M:設(shè)置本地直接內(nèi)存大小
5.2測(cè)試代碼
packagecom.jzj.jvmtest.oomtest;
importsun.misc.VM;
importjava.nio.ByteBuffer;
*本地直接內(nèi)存溢出
*參數(shù)-XX:MaxDirectMemorySize=10M來(lái)控制本地直接內(nèi)存的大小
publicclassLocalDirectOOMextendsClassLoader{
privatestaticfinalintONE_MB=1024*1024;
publicstaticvoidmain(String[]args)throwsException{
System.out.print("最大內(nèi)存:");
System.out.println(Runtime.getRuntime().maxMemory()/1024/1024+"MB");
System.out.print("可用內(nèi)存:"
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全法律法規(guī)真題及答案解析
- 2025年食品安全管理員考試試題庫(kù)卷及答案
- 2025年嵌入式系統(tǒng)考題及答案條件
- 高頻北美統(tǒng)計(jì)學(xué)面試試題及答案
- ABB(中國(guó))校招面試題及答案
- 船廠入職考試題目及答案
- 北京市通州區(qū)中西醫(yī)結(jié)合醫(yī)院2026年畢業(yè)生招聘參考題庫(kù)必考題
- 南昌大學(xué)附屬口腔醫(yī)院2026年高層次人才招聘(3)備考題庫(kù)附答案
- 四川能投高縣綜合能源有限公司2025年招聘工作人員考試備考題庫(kù)附答案
- 招23人!2025年久治縣公安局面向社會(huì)公開(kāi)招聘警務(wù)輔助人員參考題庫(kù)附答案
- DB1331∕T 109-2025 雄安新區(qū)建設(shè)工程抗震設(shè)防標(biāo)準(zhǔn)
- 2025年度麻醉科主任述職報(bào)告
- Scratch講座課件教學(xué)課件
- 2025年度安全生產(chǎn)工作述職報(bào)告
- 2025年全國(guó)碩士研究生考試《管理類(lèi)聯(lián)考綜合能力》試題及答案
- 護(hù)理質(zhì)量管理質(zhì)控方案2026
- 《低碳醫(yī)院評(píng)價(jià)指南》(T-SHWSHQ 14-2025)
- 馬的文化介紹
- 二年級(jí)數(shù)學(xué)計(jì)算題專(zhuān)項(xiàng)練習(xí)1000題匯編集錦
- AI技術(shù)在人力資源管理中的實(shí)際應(yīng)用案例分享
- 急診預(yù)檢分診課件教學(xué)
評(píng)論
0/150
提交評(píng)論