查看Java元空间区域

有时您的应用程序可能会遇到本文中讨论“java.lang.OutOfMemoryError: Metaspace”。在这种情况下,您可能希望查看 JVM 的元空间区域中加载的内容是什么。简而言之,JVM 内存中的 Metaspace 区域包含执行应用程序所需的类元数据定义。

如果您能够了解加载到内存中的类是什么,那么它将很好地了解 JVM 内存的 Metaspace 区域中存在哪些内容。在这篇文章中,让我们探索可用于查看加载到元空间中的类的选项。

以下是查看元空间中加载的类的选项:

  1. -verbose:class
  2. -Xlog:class+load
  3. jcmd GC.class_histogram
  4. 程序化方法
  5. 堆转储分析

1、-verbose:class

如果您在 Java 版本 8 或更低版本上运行,则可以使用此选项。当您在启动期间将“-verbose:class”选项传递给您的应用程序时,它将打印所有加载到内存中的类。加载的类将打印在标准错误流中(即控制台,如果您没有将错误流路由到日志文件)。

java {app_name} -verbose:<b>class</b>

2、-Xlog:class+load

如果您在 Java 版本 9 或更高版本上运行,则可以使用此选项。当您在启动期间将“-Xlog:class+load”选项传递给您的应用程序时,它将打印所有加载到内存中的类。加载的类将打印在您配置的文件路径中。

java {app_name} -Xlog:<b>class</b>+load=info:/opt/log/loadedClasses.txt 

** 3、jcmd GC.class_histogram**

JDK 包含一个名为“jcmd”的工具。您可以在 JVM 运行时调用此工具来检查元空间区域的内容。当您使用“GC.class_histogram”参数调用此工具时,它将打印加载到内存中的类列表。您可以在两种模式下调用此工具:

1、输出在控制台上加载的类

jcmd {pid} GC.<b>class</b>_histogram

当您调用如上所示的“jcmd”时,它将在控制台中打印所有加载的类。这里 {pid} 是您的 java 应用程序的进程 ID。

2、输出在文件上加载的类

jcmd {pid} GC.<b>class</b>_histogram filename={file-path}

当您如上所示调用“jcmd”时,它将打印“文件名”参数中指定的文件路径中的所有加载类。这里 {pid} 是您的 java 应用程序的进程 ID。

4、程序化方法

您还可以使用编程方法打印加载到内存中的类。 开源 Guava 库

.getClassLoader()); Set<ClassInfo> <b>class</b> = <b>class</b>Path.getAllClasses();

5.、转储分析

查看加载到内存中的类的另一个选项是检查堆转储。堆转储报告加载到内存中的所有数据、对象、类。您可以使用 此处给出的一种方法来捕获堆转储 。捕获堆转储后,您可以使用 Eclipse MAT 、 HeapHero等堆转储分析工具

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值