Java代码耗了多少内存_如何看一段JAVA代码耗了多少内存

简单的方法,如下:

Runtime r = Runtime.getRuntime();

r.gc();

long startMem = r.freememory(); // 开始时的剩余内存

你的代码……

long orz = startMem - r.freememory(); // 剩余内存 现在

但这当然不够精确,尤其是“你的代码”足够多的时候。

那要怎么样做才能够精确呢?使用,java.lang.instrument ,当然,

剩下的,思路就是:

在启动Java进程的时候把上文中写好的这个agent作为参数放进去,然后getObjectSize()方法可获取单个对象的大小,我们自己再通过反射逐个成员,对其进行getObjectSize(),然后所有的size求和。

最后,还要知道的一点知识是:

一个实例化的对象在内存中需要存储的信息包括:

对象的头部(对象的GC信息,hash值,类定义引用等)

对象的成员变量: 包括基本数据类型和引用。 如成员变量是一个引用, 引用了其他对象,被引用的对象内存另外计算。

对象大小分为:

自身的大小(Shadow heap size)

所引用的对象的大小(Retained heap size)。

基本数据类型大小如下:

type    size(bits)    bytes

boolean    8          1

byte         8          1

char         16        2

short       16        2

int           32        4

long         64        8

float         32        4

double      64        8

在32位的JVM上,一个对象引用占用4个字节;在64位上,占用8个字节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值