占位 2022-01-10 15:15 采纳率: 0%
浏览 14

Tomcat 中实例化Instrumentation,获取的时候是null

参考帖子https://bbs.csdn.net/topics/391962675,该贴描述了问题,但没有解决方案,以下是我的解决方式

premain方法调用,但tomcat程序中获取instrumentation是null,原因是premain是系统类加载器加载的,在我们应用程序加载之前就完成了,所以可用系统类加载器获取即能获取到

public class SizeTool {
  
    // 注意一定是public修饰
    public static Instrumentation instrumentation;

    public static void premain(String args, Instrumentation inst) {
        System.out.println(String.format("jvm内存初始化参数: %s,%s", args, inst));
        instrumentation = inst;
        int  i = 3;
        System.out.println("jvm内存初始化:" + instrumentation.getObjectSize(i));
    }

    public static Instrumentation getinst() {
        try {
            // 用系统类加载去加载
            return (Instrumentation) ClassLoader.getSystemClassLoader()
                    .loadClass(SizeTool.class.getName())
                    .getDeclaredField("instrumentation")
                    .get(null);
        } catch(Exception e) {
            return null;
        }
    }



    public static long sizeOf(Object o) {
        return getinst().getObjectSize(o);
    }

}

  • 写回答

1条回答 默认 最新

  • Juwell16 2022-07-04 10:02
    关注

    你的成员变量instrumentation在哪里初始化的呀?

    评论

报告相同问题?

问题事件

  • 创建了问题 1月10日

悬赏问题

  • ¥15 海湾GST-DJ-N500
  • ¥15 氧化掩蔽层与注入条件关系
  • ¥15 Django DRF 如何反序列化得到Python对象类型数据
  • ¥15 多数据源与Hystrix的冲突
  • ¥15 如何在线硕士了解,广告太多,希望有真实接触过的人回答下?(标签-学习|关键词-在线硕士)
  • ¥15 zabbix6.4与frp如何进行联动
  • ¥15 如何使用Echarts制作途中时间序列表
  • ¥15 图论相关的数学问题,共10个
  • ¥15 EtherCAT的问题,创建一个XML文件
  • ¥15 微信公众号羽毛球自动抢定场程序制作