首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在OpenJDK 17上记录加载类的位置?(无法识别的VM选项'TraceClassLoading')

在OpenJDK 17上记录加载类的位置可以通过设置VM选项来实现。然而,需要注意的是,OpenJDK 17中已经移除了'TraceClassLoading'选项,因此无法直接使用该选项来记录加载类的位置。不过,我们可以通过其他方式来实现相同的目的。

一种替代的方法是使用Java Agent来监控类加载过程并记录类的位置。Java Agent是一种在Java应用程序运行时修改或增强字节码的工具。通过编写一个Java Agent,我们可以在类加载时插入代码来记录类的位置。

以下是一个简单的示例,演示如何使用Java Agent来记录加载类的位置:

  1. 创建一个Java类,命名为ClassLocationAgent,实现java.lang.instrument.ClassFileTransformer接口。该类将用于在类加载时进行转换。
代码语言:txt
复制
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
import java.security.ProtectionDomain;

public class ClassLocationAgent implements ClassFileTransformer {
    @Override
    public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined,
                            ProtectionDomain protectionDomain, byte[] classfileBuffer)
            throws IllegalClassFormatException {
        System.out.println("Class loaded: " + className);
        return classfileBuffer;
    }
}
  1. 创建一个Java类,命名为AgentMain,用于启动Java Agent。
代码语言:txt
复制
import java.lang.instrument.Instrumentation;

public class AgentMain {
    public static void premain(String agentArgs, Instrumentation inst) {
        inst.addTransformer(new ClassLocationAgent());
    }
}
  1. 编译上述两个Java类,并将它们打包成一个JAR文件。
  2. 在运行OpenJDK 17时,使用-javaagent选项指定上述JAR文件的路径。
代码语言:txt
复制
java -javaagent:/path/to/agent.jar YourMainClass
  1. 运行应用程序后,类加载时的位置信息将被打印出来。

这种方法可以帮助我们在OpenJDK 17上记录加载类的位置。请注意,这只是一个简单的示例,实际应用中可能需要根据需求进行更复杂的处理。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)、腾讯云容器服务(TKE)、腾讯云函数计算(SCF)等。你可以通过访问腾讯云官方网站获取更详细的产品介绍和相关文档:https://cloud.tencent.com/product

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

从Java 8升级到Java 11的注意事项

显式设置默认选项 如果在作用点 VM 上运行,则设置命令行选项 -XX:+PrintCommandLineFlags 会转储由 VM 设置的选项的值,特别是由 GC 设置的默认值。...无法识别的 VM 选项 无法识别的选项 VM 警告:忽略选项 VM 警告:选项 已弃用 警告:发生非法的反射访问操作 java.lang.reflect.InaccessibleObjectException...无法识别的选项 如果删除了某个命令行选项,则应用程序会输出 Unrecognized option: 或 Unrecognized VM option,后跟有问题的选项的名称。...无法识别的选项会导致 VM 退出。已弃用但未删除的选项会生成 VM 警告。 通常情况下,已删除的选项没有替换项,唯一办法是从命令行中删除该选项。垃圾回收日志记录的选项是一个例外。...Web 页面 VM 选项资源管理器提供了自 JDK 7 以后在 Java 中添加或删除的选项的详尽列表。 错误:无法创建 Java 虚拟机 当 JVM 遇到无法识别的选项时,会输出此错误消息。

2.4K20

全网最硬核 JVM 内存解析 - 13.JVM 线程内存设计

MetaChunk 类加载的入口 SystemDictionary 与保留所有 ClassLoaderData 的 ClassLoaderDataGraph 每个类加载器私有的 ClassLoaderData...回收 元空间分配与回收流程举例(全网最硬核 JVM 内存解析 - 10.元空间分配与回收流程举例开始) 首先类加载器 1 需要分配 1023 字节大小的内存,属于类空间 然后类加载器 1...还需要分配 1023 字节大小的内存,属于类空间 然后类加载器 1 需要分配 264 KB 大小的内存,属于类空间 然后类加载器 1 需要分配 2 MB 大小的内存,属于类空间 然后类加载器 1 需要分配...128KB 大小的内存,属于类空间 新来一个类加载器 2,需要分配 1023 Bytes 大小的内存,属于类空间 然后类加载器 1 被 GC 回收掉 然后类加载器 2 需要分配 1 MB 大小的内存,...其实新的虚拟线程,在线程内存结构上并没有啥变化,只是存储位置的变化,实际的负载线程(CarrierThread)还是老的线程。

52720
  • 开源BI工具Metabase安装

    目前Metabase需要Java 7或更高版本,并且可以在OpenJDK或Oracle JDK上运行。 Metabase团队倾向于尽可能使用开源解决方案。...注:在应用程序运行时,您无法更改应用程序数据库。这些值在应用程序启动时只读一次,并在应用程序的整个运行过程中保持不变。...Postgres 对于Metabase的生产安装,我们建议用户用更强大的选项(如Postgres)替换H2数据库。当Metabase与许多用户一起运行时,这提供了更高程度的性能和可靠性。...这是一个非常常见的问题,可以通过启动java来-Duser.timezone=正确地设置选项来匹配元数据库报告时区。 配置日志记录级别 默认情况下,Metabase会记录相当多的信息。...没有额外的参数要求,如果从Jar启动,下面的调用将会起作用: java -jar metabase.jar 在Java 9上运行 Java版本9引入了一个新的模块系统,对类加载有一些额外的限制。

    2.7K10

    JVM Advanced Runtime Options

    -XX:+CheckEndorsedAndExtDirs jdk 8中新增加的一个参数,有兴趣的可以去看看openjdk中的关于这一块的实现(http://hg.openjdk.java.net/jdk8u...5k -XX:LargePageSizeInBytes=size 设置内存页的大小,但是注意,在Solaris上这个参数应该为2的幂。...这时候我们可以使用JVM的外部调试工具连接JVM来查看对应的原因。这个在JVM排错时比较有用,尤其是无法直观获得错误原因时。...-XX:+TraceClassUnloading -XX:+TraceLoaderConstraints 以上都为JVM的跟踪行为,只不过每一项指定的跟踪项不同 Loading 为类加载跟踪...LoadingPreorder 按照引用顺序跟踪类加载 Resolution 跟踪常量池行为 Unloading 跟踪类的卸载行为 LoaderConstraints 跟踪类加载器的约束行为

    99010

    了解JVM的相关概述,发现很多全忘了(文末福利)

    1、学之前存在的问题 1、你被JVM伤害过吗? 你是否也遇到过这些问题? 运行着的线上系统突然卡死,系统无法访问,甚至直接OOM! 想解决线上JVM GC问题,但却无从下手。...如Oracle 宣布的那样,在没有商业许可的情况下,在2019年1月之后发布的Oracle Java SE 8的公开更新将无法用于商业,商业或生产用途。...Oracle JDK具有良好的GC选项和更好的渲染器,而OpenJDK具有更少的GC选项,并且由于其包含自己的渲染器的分布,因此具有较慢的图形渲染器选项。...Oracle JDK发布时大多数功能都是开源的,其中一些功能免于开源,并且根据Sun的许可授权,而OpenJDK发布了所有功能,如开源和免费。...、Jelatine JVM、Nano VM、MRP、Moxie JVM 2、JVM的生命周期 虚拟机的启动 Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类

    19520

    美团架构师探秘Java生态系统,介绍JDK、JVM、JEP

    实际上,很多语言都可以声明只携带数据的类,如Scala的case类,Kotlin的data类以及C#的record类,它们被证明是很有用的。...为此,Java 15将使用记录record来建模POJO类,从而方便简洁地声明某个类只携带数据,而不会改变类的状态,同时自动实现一些用于数据生产/消费的方法。...为了方便读者自行尝试,这里给出在三大主流操作系统上构建OpenJDK和断点调试HotSpot VM的方式。 1....那么,能不能付出较小努力,用一个业界顶尖级别的虚拟机来运行这些语言,享受该虚拟机的一些工匠特性,如GC、锁优化、JIT编译器呢? 答案是肯定的。...Substrate VM的想法很美好,但是在实践中会遇到诸多问题,因为Java有反射等动态特性,这些特性可能导致新类加载无法通过静态分析解决。

    92320

    JVM解毒——JVM与Java体系结构

    Java虚拟机的启动是通过引导类加载器(Bootstrap Class Loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的。...或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作 除此之外,JNI(Java Native Interface)规范描述了用JNI Invocation API来加载或卸载...:如热点探测、两级即时编译器、编译器与解析器混合工作模式等; 使用准确式内存管理:虚拟机可以知道内存中某个位置的数据具体是什么类型; 在商业应用上只存在了很短暂的时间就被更优秀的 HotSpot VM...所取代 Sun HotSpot VM 它是 Sun JDK 和 OpenJDK 中所带的虚拟机,也是目前使用范围最广的 Java 虚拟机; 继承了 Sun 之前两款商用虚拟机的优点(如准确式内存管理),...的时候,整合了 JRokit VM 和 HotSpot VM,如使用了 JRokit 的垃圾回收器与 MissionControl 服务,使用了 HotSpot 的 JIT 编译器与混合的运行时系统。

    52210
    领券