extend:SoftReference类型的fullgc不会被回收。fullgc后没有空间容纳对象,fullgc会回收SoftReference类型。如果第二次fullgc后空间不够,就会发生oom。元空间不足,直接扩容,如果扩容到MetaspaceSize触发oldgc(根据垃圾收集器决定,如果是g1的G1OldcmsCMS),卸载class扩容,扩容到MaxMetaspaceSize,触发fullgc卸载类。jstat-gc{pid}查看jvm内存使用情况class{pid}查看类加载状态gccause上次和本次gc发生原因gcutil查看gc状态https://blog.csdn.net/yaoqian...jmap-clstats{pid}查看类加载状态无选项:查看进程的内存映像信息,类似于Solarispmap命令。heap:显示Java堆详细信息histo[:live]:显示堆中对象的统计信息finalizerinfo:显示F-Queue队列中等待Finalizer线程执行finalizer方法的对象dump::生成堆转储快照F:当-dump没有响应时,使用-dump或-histo参数。在此模式下,live子参数无效。J:指定传递给运行jmap转储文件的JVM的参数,使用jvisualvm.exe或其他工具查看文件。jvm命令:jmap-dump:format=b,file=outfile{pid}java-XX:+PrintFlagsFinal-version:查看jvm信息$jinfo-flags{pid}:查看进程jvm参数-flagpid:打印指定JVM的参数值-flag[+|-]pid:设置指定JVM参数的布尔值pmap[-x|-d][-q]pid:查看进程jvm参数的内存映像信息-verbose:class查看类加载情况-verbose:gc查看虚拟机中的内存回收情况-verbose:jni查看本地方法调用status-XX:+PrintFlagsInitial检查初始值-XX:+PrintFlagsFinal检查最终值,因为初始值可能被修改-XX:+UnlockExperimentalVMOptions解锁实验参数。JVM中的一些实验参数不能直接赋值。您必须在分配值之前使用此参数。-XX:+UnlockDiagnosticVMOptions解锁诊断参数。XX:MaxMetaspaceSize=N,对于64位JVM,元空间默认初始大小为20.75MB,元空间默认最大值为无限制。MaxMetaspaceSize用于设置元空间区域的最大值。这个值可以通过mxbean中的MemoryPoolBean来获取。如果不设置这个参数,那么通过mxbean得到的最大值就是-1,也就是无穷大。由于调整元空间的大小需要FullGC,这是一个非常昂贵的操作。如果应用程序启动时发生FullGC,通常是由于永久代或元空间的大小调整所致。基于这种情况,一般建议在JVM参数中,将MetaspaceSize和MaxMetaspaceSize设置为相同的值。在JVM参数中,必须设置HeapDumpAfterFullGC和HeapDumpOnOutOfMemoryError这两个参数。可以在发送FGC和OOM的时候记录下当时的Java堆情况,以便后期分析;(2)GC日志要单独打印成日志文件,方便分析。如果没有特别设置,GC日志会打印到stdout.log,中间会混杂其他日志,影响排错。