首页
学习
活动
专区
工具
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.1K20

全网最硬核 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)还是老线程。

42120

开源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.5K10

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 跟踪加载约束行为

92410

了解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)创建一个初始

15320

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

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

77820

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

Java虚拟机启动是通过引导加载器(Bootstrap Class Loader)创建一个初始(initial class)来完成,这个是由虚拟机具体实现指定。...或Runtimehalt方法,并且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 编译器与混合运行时系统。

49810

在Ubuntu 14.0414.10搭建Minecraft Spigot服务器

本文介绍了如何在Ubuntu 14.04 / 14.10搭建自己Minecraft服务器,搭建一个让我们可以与朋友远程开黑私服,甚至是搭建一个几百人公共服务器。...~trusty1) OpenJDK 64-Bit Server VM (build 24.75-b04, mixed mode) 如果您运行是其他防火墙,则需要按这些防火墙说明添加例外。...3.安装git和openJDK: sudo apt-get install git openjdk-7-jre-headless 4.如果您正在使用IP tables防火墙(“ 保护服务器”中所示),...-content-disposition选项会非常有用,可以避免下载之后文件名乱码。...下次启动SpigotMC服务器时就会加载新加入插件了: su -l minecraft -c "screen -dmS minecraft /home/minecraft/server/wrapper.sh

3.1K30
领券