java 获取对象内存大小

使用Instrumentation类:Java提供了Instrumentation类,可以通过该类的getObjectSize()方法来获取对象的大小。可以通过以下步骤来实现:

package sizeof;

import java.lang.instrument.Instrumentation;

public class ObjectShallowSize {
    private static Instrumentation inst;

    public static void premain(String agentArgs, Instrumentation instP){
        inst = instP;
    }

    public static long sizeOf(Object obj){
        if (inst == null) {
            throw new IllegalStateException("Instrumentation not initialized");
        }
        return inst.getObjectSize(obj);
    }
}

定义META-INF/MANIFEST.MF文件

Premain-Class: sizeof.ObjectShallowSize

cd 编译后的类和META-INF文件夹所在目录

jar cvfm java-agent-sizeof.jar META-INF/MANIFEST.MF

项目打成jar 包,给需要使用ObjectShallowSize的工程引入该jar包,并通过代码测试对象所占内存大小

在测试项目工程引入jar 包

 <dependency>
            <!-- 模块原有groupId -->
            <groupId>org.example</groupId>
            <!-- 模块原有artifactId -->
            <artifactId>ObjectShallowSize</artifactId>
            <!-- 模块原有version -->
            <version>1.0-SNAPSHOT</version>
            <!-- 系统依赖范围,往往与本机绑定,不过我本次和项目中的jar包进行了绑定 -->
            <scope>system</scope>
            <!-- 本地jar包绝对路径,lib是我们新建的目录, -->
            <systemPath>E:/project/AgentTest/lib/ObjectShallowSize-1.0-SNAPSHOT.jar</systemPath>
        </dependency>
        

编写测试类


import sizeof.ObjectShallowSize;


import java.io.IOException;



public class SizeofWithInstrumetation {


    public static void main(String[] args) throws IOException {

        Object obj=new Object(){}.getClass().getEnclosingClass();

       
        System.out.println(ObjectShallowSize.sizeOf(obj));
       


    }
    

}

运行配置jvm-options 添加

-javaagent:E:/project/AgentTest/lib/java-agent-sizeof.jar

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值