看元空间别只盯着 used:capacity、committed、free chunks 是不同的账。这篇用 jcmd VM.metaspace 与 MemoryPoolMXBean 同时读数,把加载器全部/部分丢弃后的变化量出来。
[默认]
起点 MXBean used= 619 KB committed= 768 KB | Both: 88 chunks, 4.50 MB capacity, 3.44 MB ( 76%) committed, 3.32 MB ( 74%) used, 123.41 KB ( 3%) free, 0 bytes ( 0%) waste , deallocated
保留 300 个加载器(各 150 个类) MXBean used=100457 KB committed=109568 KB | Both: 5191 chunks, 107.61 MB capacity, 106.92 MB (>99%) committed, 98.10 MB ( 91%) used, 8.81 MB ( 8%) free, 4.69 KB ( <1%) waste , deall
Total Usage - 343 loaders, 46753 classes (1105 shared):
全部丢弃并 GC 之后 MXBean used= 3801 KB committed= 3968 KB | Both: 92 chunks, 4.51 MB capacity, 3.82 MB ( 85%) committed, 3.71 MB ( 82%) used, 111.09 KB ( 2%) free, 0 bytes ( 0%) waste , deallocated
Total Usage - 43 loaders, 1754 classes (1105 shared): [MetaspaceReclaimPolicy=balanced]
起点 MXBean used= 616 KB committed= 768 KB | Both: 88 chunks, 4.50 MB capacity, 3.44 MB ( 76%) committed, 3.32 MB ( 74%) used, 124.60 KB ( 3%) free, 0 bytes ( 0%) waste , deallocated
保留 300 个加载器(各 150 个类) MXBean used=100456 KB committed=109568 KB | Both: 5191 chunks, 107.61 MB capacity, 106.92 MB (>99%) committed, 98.10 MB ( 91%) used, 8.81 MB ( 8%) free, 4.69 KB ( <1%) waste , deall
Total Usage - 343 loaders, 46753 classes (1105 shared):
全部丢弃并 GC 之后 MXBean used= 3801 KB committed= 3968 KB | Both: 92 chunks, 4.51 MB capacity, 3.82 MB ( 85%) committed, 3.71 MB ( 82%) used, 111.64 KB ( 2%) free, 0 bytes ( 0%) waste , deallocated
Total Usage - 43 loaders, 1754 classes (1105 shared):
OpenJDK 64-Bit Server VM warning: Ignoring option MetaspaceReclaimPolicy; support was removed in 21.0
[MetaspaceReclaimPolicy=aggressive]
起点 MXBean used= 616 KB committed= 768 KB | Both: 88 chunks, 4.50 MB capacity, 3.44 MB ( 76%) committed, 3.31 MB ( 74%) used, 128.76 KB ( 3%) free, 0 bytes ( 0%) waste , deallocated
保留 300 个加载器(各 150 个类) MXBean used=100455 KB committed=109568 KB | Both: 5191 chunks, 107.61 MB capacity, 106.92 MB (>99%) committed, 98.10 MB ( 91%) used, 8.82 MB ( 8%) free, 4.69 KB ( <1%) waste , deall
Total Usage - 343 loaders, 46753 classes (1105 shared):
全部丢弃并 GC 之后 MXBean used= 3800 KB committed= 3968 KB | Both: 92 chunks, 4.51 MB capacity, 3.82 MB ( 85%) committed, 3.71 MB ( 82%) used, 112.75 KB ( 2%) free, 0 bytes ( 0%) waste , deallocated
Total Usage - 43 loaders, 1754 classes (1105 shared):
OpenJDK 64-Bit Server VM warning: Ignoring option MetaspaceReclaimPolicy; support was removed in 21.0
[MetaspaceReclaimPolicy=none]
起点 MXBean used= 617 KB committed= 768 KB | Both: 88 chunks, 4.50 MB capacity, 3.44 MB ( 76%) committed, 3.32 MB ( 74%) used, 117.80 KB ( 3%) free, 0 bytes ( 0%) waste , deallocated
保留 300 个加载器(各 150 个类) MXBean used=100463 KB committed=109568 KB | Both: 5191 chunks, 107.61 MB capacity, 106.92 MB (>99%) committed, 98.11 MB ( 91%) used, 8.81 MB ( 8%) free, 4.69 KB ( <1%) waste , deall
Total Usage - 343 loaders, 46753 classes (1105 shared):
全部丢弃并 GC 之后 MXBean used= 3808 KB committed= 3968 KB | Both: 92 chunks, 4.51 MB capacity, 3.82 MB ( 85%) committed, 3.72 MB ( 82%) used, 104.59 KB ( 2%) free, 0 bytes ( 0%) waste , deallocated
Total Usage - 43 loaders, 1754 classes (1105 shared):
OpenJDK 64-Bit Server VM warning: Ignoring option MetaspaceReclaimPolicy; support was removed in 21.0 [interleave]
起点 MXBean used= 623 KB committed= 768 KB | Both: 88 chunks, 4.50 MB capacity, 3.44 MB ( 76%) committed, 3.32 MB ( 74%) used, 122.69 KB ( 3%) free, 0 bytes ( 0%) waste , deallocated
保留 300 个加载器 MXBean used=100446 KB committed=109568 KB | Both: 5191 chunks, 107.61 MB capacity, 106.92 MB (>99%) committed, 98.09 MB ( 91%) used, 8.82 MB ( 8%) free, 4.69 KB ( <1%) waste , deall
丢弃一半(interleave)并 GC 之后 MXBean used= 52120 KB committed= 71168 KB | Both: 2642 chunks, 56.07 MB capacity, 55.38 MB ( 99%) committed, 50.90 MB ( 91%) used, 4.48 MB ( 8%) free, 2.34 KB ( <1%) waste , dealloc
Total Usage - 193 loaders, 24254 classes (1105 shared):
再丢弃另一半并 GC 之后 MXBean used= 3791 KB committed= 3968 KB | Both: 92 chunks, 4.51 MB capacity, 3.82 MB ( 85%) committed, 3.70 MB ( 82%) used, 121.55 KB ( 3%) free, 0 bytes ( 0%) waste , deallocated
[firsthalf]
起点 MXBean used= 618 KB committed= 768 KB | Both: 88 chunks, 4.50 MB capacity, 3.44 MB ( 76%) committed, 3.31 MB ( 74%) used, 127.05 KB ( 3%) free, 0 bytes ( 0%) waste , deallocated
保留 300 个加载器 MXBean used=100456 KB committed=109568 KB | Both: 5191 chunks, 107.61 MB capacity, 106.92 MB (>99%) committed, 98.10 MB ( 91%) used, 8.81 MB ( 8%) free, 4.69 KB ( <1%) waste , deall
丢弃一半(firsthalf)并 GC 之后 MXBean used= 52129 KB committed= 56896 KB | Both: 2642 chunks, 56.07 MB capacity, 55.38 MB ( 99%) committed, 50.91 MB ( 91%) used, 4.47 MB ( 8%) free, 2.34 KB ( <1%) waste , dealloc
Total Usage - 193 loaders, 24254 classes (1105 shared):
再丢弃另一半并 GC 之后 MXBean used= 3801 KB committed= 3968 KB | Both: 92 chunks, 4.51 MB capacity, 3.82 MB ( 85%) committed, 3.71 MB ( 82%) used, 111.91 KB ( 2%) free, 0 bytes ( 0%) waste , deallocated [1 个类 ×1000]
起点 MXBean used= 619 KB committed= 768 KB | Both: 88 chunks, 4.50 MB capacity, 3.44 MB ( 76%) committed, 3.32 MB ( 74%) used, 119.87 KB ( 3%) free, 0 bytes ( 0%) waste , deallocated
保留 1000 个加载器(各 1 个类) MXBean used= 5930 KB committed= 9920 KB | Both: 2092 chunks, 10.37 MB capacity, 9.68 MB ( 93%) committed, 5.79 MB ( 56%) used, 3.89 MB ( 38%) free, 0 bytes ( 0%) waste , deallocat
全部丢弃并 GC 之后 MXBean used= 3814 KB committed= 3968 KB | Both: 92 chunks, 4.51 MB capacity, 3.82 MB ( 85%) committed, 3.73 MB ( 83%) used, 98.38 KB ( 2%) free, 0 bytes ( 0%) waste , deallocated: [交错丢弃 第 1 次]
池:Metaspace type=Non-heap memory
池:Compressed Class Space type=Non-heap memory
保留 300 个: 两个池合计 used=124951 KB committed=138752 KB | Both: 1.12 GB reserved, 106.94 MB committed. | In free chunks: 0 bytes ( 0%)
丢弃一半 + GC 后立即: 两个池合计 used=64524 KB committed=109952 KB | Both: 1.12 GB reserved, 78.81 MB committed. | In free chunks: 32.79 MB ( 42%)
再等 3 秒 + GC: 两个池合计 used=64524 KB committed=109952 KB | Both: 1.12 GB reserved, 78.81 MB committed. | In free chunks: 32.79 MB ( 42%)
[交错丢弃 第 2 次]
保留 300 个: 两个池合计 used=124954 KB committed=138752 KB | Both: 1.12 GB reserved, 106.94 MB committed. | In free chunks: 0 bytes ( 0%)
丢弃一半 + GC 后立即: 两个池合计 used=64527 KB committed=109952 KB | Both: 1.12 GB reserved, 78.81 MB committed. | In free chunks: 32.79 MB ( 42%)
再等 3 秒 + GC: 两个池合计 used=64527 KB committed=109952 KB | Both: 1.12 GB reserved, 78.81 MB committed. | In free chunks: 32.79 MB ( 42%)
[交错丢弃 第 3 次]
保留 300 个: 两个池合计 used=124943 KB committed=138752 KB | Both: 1.12 GB reserved, 106.94 MB committed. | In free chunks: 0 bytes ( 0%)
丢弃一半 + GC 后立即: 两个池合计 used=64516 KB committed=109952 KB | Both: 1.12 GB reserved, 78.81 MB committed. | In free chunks: 32.79 MB ( 42%)
再等 3 秒 + GC: 两个池合计 used=64516 KB committed=109952 KB | Both: 1.12 GB reserved, 78.81 MB committed. | In free chunks: 32.79 MB ( 42%)
[丢弃前一半 第 1 次]
池:Metaspace type=Non-heap memory
池:Compressed Class Space type=Non-heap memory
保留 300 个: 两个池合计 used=124950 KB committed=138752 KB | Both: 1.12 GB reserved, 106.94 MB committed. | In free chunks: 0 bytes ( 0%)
丢弃一半 + GC 后立即: 两个池合计 used=64523 KB committed=71744 KB | Both: 1.12 GB reserved, 55.50 MB committed. | In free chunks: 172.00 KB ( <1%)
再等 3 秒 + GC: 两个池合计 used=64523 KB committed=71744 KB | Both: 1.12 GB reserved, 55.50 MB committed. | In free chunks: 172.00 KB ( <1%)
[丢弃前一半 第 2 次]
保留 300 个: 两个池合计 used=124951 KB committed=138752 KB | Both: 1.12 GB reserved, 106.94 MB committed. | In free chunks: 0 bytes ( 0%)
丢弃一半 + GC 后立即: 两个池合计 used=64523 KB committed=71744 KB | Both: 1.12 GB reserved, 55.50 MB committed. | In free chunks: 172.00 KB ( <1%)
再等 3 秒 + GC: 两个池合计 used=64523 KB committed=71744 KB | Both: 1.12 GB reserved, 55.50 MB committed. | In free chunks: 172.00 KB ( <1%)
[丢弃前一半 第 3 次]
保留 300 个: 两个池合计 used=124946 KB committed=138752 KB | Both: 1.12 GB reserved, 106.94 MB committed. | In free chunks: 0 bytes ( 0%)
丢弃一半 + GC 后立即: 两个池合计 used=64522 KB committed=71744 KB | Both: 1.12 GB reserved, 55.50 MB committed. | In free chunks: 172.00 KB ( <1%)
再等 3 秒 + GC: 两个池合计 used=64522 KB committed=71744 KB | Both: 1.12 GB reserved, 55.50 MB committed. | In free chunks: 172.00 KB ( <1%) [JDK 17 MetaspaceReclaimPolicy=balanced]
起点 MXBean used= 612 KB committed= 768 KB
保留 300 个加载器(各 150 个类) MXBean used= 96804 KB committed=104000 KB
全部丢弃并 GC 之后 MXBean used= 3046 KB committed= 3200 KB
[JDK 17 MetaspaceReclaimPolicy=aggressive]
起点 MXBean used= 610 KB committed= 656 KB
保留 300 个加载器(各 150 个类) MXBean used= 96788 KB committed=103888 KB
全部丢弃并 GC 之后 MXBean used= 3030 KB committed= 3104 KB
[JDK 17 MetaspaceReclaimPolicy=none]
起点 MXBean used= 609 KB committed= 4480 KB
保留 300 个加载器(各 150 个类) MXBean used= 96790 KB committed=105472 KB
全部丢弃并 GC 之后 MXBean used= 3032 KB committed=105472 KB