【检查 Java 元空间区域的内容】
文章插图
JVM 内存有以下区域:
- Young Generation
- Old Generation
- Metaspace
- Others region
文章插图
图:JVM 内存区域
要查看哪些对象存储在哪个区域,您可以参考此视频剪辑 。有时您的应用程序可能会遇到本文中讨论的 ' JAVA.lang.OutOfMemoryError: Metaspace' 。在这种情况下,您可能希望查看 JVM 的 Metaspace 区域中加载了哪些内容 。简而言之,JVM 内存中的 Metaspace 区域包含执行应用程序所需的类元数据定义 。如果想了解类元数据定义是什么意思,可以参考这个文档. 它有很多细节,你可能不必了解它的所有细节 。基本上,如果您能够了解加载到内存中的类是什么,那么它将很好地了解 JVM 内存的 Metaspace 区域中存在哪些内容 。在这篇文章中,让我们探索可用于查看加载到元空间中的类的选项 。
以下是查看元空间中加载的类的选项:
-verbose:class
-Xlog:class+load
jcmd GC.class_histogram
Programmatic Approach
Heap Dump analysis
让我们在这篇文章中详细讨论每个选项 。
1. -Verbose: Class
如果您在 Java 版本 8 或更低版本上运行,则可以使用此选项 。当您在启动期间将“ -verbose:class”选项传递给您的应用程序时,它将打印所有加载到内存中的类 。加载的类将打印在标准错误流中(即控制台,如果您没有将错误流路由到日志文件) 。
java {app_name} -verbose :class
以下是传递“-verbose:class”参数时开源BuggyApp 程序的示例输出:
[Opened C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.Object from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.io.Serializable from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.Comparable from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.CharSequence from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.String from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.reflect.AnnotatedElement from C:Program
FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.reflect.GenericDeclaration from C:Program
FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.reflect.Type from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.Class from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.Cloneable from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.ClassLoader from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.System from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.Throwable from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.Error from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.ThreadDeath from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.Exception from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.RuntimeException from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.SecurityManager from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.security.ProtectionDomain from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.security.AccessControlContext from C:Program
FilesJavajre1.8.0_171librt.jar]
[Loaded java.security.SecureClassLoader from C:Program
FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.ReflectiveOperationException from C:Program
FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.ClassNotFoundException from C:Program
FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.LinkageError from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.NoClassDefFoundError from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.ClassCastException from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.ArrayStoreException from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.VirtualmachineError from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.OutOfMemoryError from C:Program FilesJavajre1.8.0_171librt.jar]
[Loaded java.lang.StackOverflowError from C:Program FilesJavajre1.8.0_171librt.jar]
2.-Xlog:类+加载
如果您在 Java 版本 9 或更高版本上运行,则可以使用此选项 。当您在启动期间将“-Xlog:class+load”选项传递给您的应用程序时,它将打印所有加载到内存中的类 。加载的类将打印在您配置的文件路径中 。
java {app_name} -Xlog:class+load=info:/opt/log/loadedClasses.txt以下是传递“-Xlog:class+load”参数时 java 程序的示例输出:
推荐阅读
- “公元”的来历 公元来历
- 章泽天|?5万美元也不给,最终让刘婧尧绝望?
- 章泽天|5万美元也不给,刘强东在明州案上的强势,让刘婧尧最终绝望了?
- 张小光|赵本山爱徒张小光,年入百万却生活节俭,为省50元高速费命丧黄泉
- 大学生|毫无诚意,中铁某局在哈工大与哈工程校招,6000元工资无人看上
- 元宵有哪些种类 汤圆馅种类
- 双下巴|董文华饭桌上高歌引欢呼!脸部圆润双下巴突出,桌上千元名酒抢眼
- 朱元璋临死前召见朱棣?朱元璋得以善终的大臣
- 金·卡戴珊|金·卡戴珊因支持加密资产而支付 126 万美元的巨额罚款
- 朱元璋所建立的明朝没有彻底消灭蒙元王朝?为了有效控制地方,元朝统治者