共计 1580 个字符,预计需要花费 4 分钟才能阅读完成。
extend:
SoftReference 类型的 fullgc 并不会回收掉,fullgc 后还没有空间装下对象就会再次发生 fullgc 回收掉 SoftReference 类型,如果第二次 fullgc 后空间还不够,就会产生 oom。
元空间有余,间接扩容,如果扩容到 MetaspaceSize 引发 old gc(依据垃圾回收器决定,如果 g1 的 G1Old cms 的 CMS),卸载类并扩容, 扩容到 MaxMetaspaceSize,引发 full gc 卸载类。
jstat -gc {pid} 查看 jvm 内存应用状况
class {pid} 查看类加载状况
gccause 上次和本次 gc 的产生的起因
gcutil 查看 gc 状况
https://blog.csdn.net/yaoqian…
jmap -clstats {pid} 查看类加载状况
no option:查看过程的内存映像信息, 相似 Solaris pmap 命令。heap:显示 Java 堆详细信息
histo[:live]:显示堆中对象的统计信息
finalizerinfo:显示在 F -Queue 队列期待 Finalizer 线程执行 finalizer 办法的对象
dump:<dump-options>:生成堆转储快照
F:当 -dump 没有响应时,应用 -dump 或者 -histo 参数. 在这个模式下,live 子参数有效.
J<flag>:指定传递给运行 jmap 的 JVM 的参数
dump 进去文件,应用 jvisualvm.exe 或者其余工具查看文件。jvm 命令:jmap -dump:format=b,file=outfile {pid}
java -XX:+PrintFlagsFinal -version:查看 jvm 信息
$jinfo -flags {pid} : 查看过程的 jvm 参数
-flag <name> pid:打印指定 JVM 的参数值
-flag [+|-]<name> pid:设置指定 JVM 参数的布尔值
pmap [-x | -d] [-q] pid: 查看过程的内存映像信息
jvm 参数
-verbose:class 查看类加载状况
-verbose:gc 查看虚拟机中内存回收状况
-verbose:jni 查看本地办法调用的状况
-XX:+PrintFlagsInitial 查看初始值
-XX:+PrintFlagsFinal 查看最终的值,因为初始值有可能被批改
-XX:+UnlockExperimentalVMOptions 解锁试验参数,JVM 中有些试验参数无奈间接赋值,必须先应用此参数能力赋值
-XX:+UnlockDiagnosticVMOptions 解锁诊断参数
-XX:+PrintCommandLineFlags 打印命令行参数
-XX:MetaspaceSize= N 和 -XX:MaxMetaspaceSize=N,对于 64 位 JVM 来说,元空间的默认初始大小是 20.75MB,默认的元空间的最大值是有限。MaxMetaspaceSize 用于设置 metaspace 区域的最大值,这个值能够通过 mxbean 中的 MemoryPoolBean 获取到,如果这个参数没有设置,那么就是通过 mxbean 拿到的最大值是 -1,示意无穷大。
因为调整元空间的大小须要 Full GC,这是十分低廉的操作,如果利用在启动的时候产生 Full GC,通常都是因为永恒代或元空间产生了大小调整,基于这种状况,个别倡议在 JVM 参数中将 MetaspaceSize 和 MaxMetaspaceSize 设置成一样的值
在 JVM 参数中肯定要设置 HeapDumpAfterFullGC 和 HeapDumpOnOutOfMemoryError 两个参数,能够在发送 FGC 和 OOM 的时候将过后的 Java 堆状况记录下来,用于预先剖析;(2)GC 日志要独自打印到一个日志文件中,不便剖析,如果不特地设置,GC 日志会打印到 stdout.log 中,会有其余的日志混合在两头,影响问题排查。