在 Java 8 中,我在我的服务上运行 GC log,通过 GCeasy 我看到元空间分配了 1GB,而峰值在 40m 左右,那么为什么分配了 1GB?
我使用这些标志并添加了“-XX:MaxMetaspaceSize=10M”。
然后我得到了 java.lang.OutOfMemoryError: Metaspace,正如预期的那样,但仍然在 GC 日志上我看到分配了 1 GB。日志中有错误吗?或者我错过了一些东西。
我在 GC 日志文件上运行 grep Metaspace 并得到以下输出:
命令行标志:-XX:CompressedClassSpaceSize=2097152 -XX:+DisableExplicitGC -XX:GCLogFileSize=104857600 -XX:InitialHeapSize=536870912 -XX:MaxHeapGCSize=536870912 -XX:MaxMetaspaceSize=10485760 -XX:MetaspaceSize =10485760 -XX :NumbersOf=10485760 -XX:+PrintGC -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:ReservedCodeCacheSize=134217728 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+ UseGCLogFileRotation -XX:+UseParallelGC
2020-05-19T16:38:18.359+0000:0.837:[完整 GC(元数据 GC 阈值)[PSYoungGen:7298K->0K(153088K)][ParOldGen:8K->6944K(349696K)]7306K->6944K(502784K) ), [元空间: 9975K->9975K(1058816K)], 0.0249384 secs] [Times: user=0.08 sys=0.01, real=0.02 secs]
2020-05-19T16:38:18.386+0000:0.864:[完整 GC(元数据 GC 阈值)[PSYoungGen:0K->0K(153088K)][ParOldGen:6944K->6944K(349696K)]6944K->6944K(502784K) ), [元空间: 9975K->9975K(1058816K)], 0.0129850 secs] [Times: user=0.04 sys=0.00, real=0.01 secs]
2020-05-19T16:38:18.400+0000: 0.879: [Full GC (Last ditch collection) [PSYoungGen: 0K->0K(153088K)] [ParOldGen: 6944K->6816K(349696K)] 6944K->6816K(502784K) ), [元空间: 9975K->9965K(1058816K)], 0.0252318 secs] [Times: user=0.07 sys=0.00, real=0.03 secs]