博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何看一段JAVA代码耗了多少内存
阅读量:6001 次
发布时间:2019-06-20

本文共 794 字,大约阅读时间需要 2 分钟。

简单的方法,如下:

Runtime r = Runtime.getRuntime(); 

r.gc(); 
long startMem = r.freememory(); // 开始时的剩余内存 
你的代码……
long orz = startMem - r.freememory(); // 剩余内存 现在

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

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

首先,我们得会用这个instrument类,参考文章:

其次,已经有强人为我们写好了计算单个对象占用内存大小的api,地址:

剩下的,思路就是:

在启动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个字节。

转载于:https://www.cnblogs.com/luminji/p/7296265.html

你可能感兴趣的文章
用 Google Map 的 Geocoder 接口来反向地址解析
查看>>
在中小型公司如何做好测试——论测试计划的重要性
查看>>
BSS段、数据段、代码段、堆与栈
查看>>
python调用c/c++写的dll
查看>>
r语言ggplot2误差棒图快速指南
查看>>
python之处理异常
查看>>
c++中的虚函数
查看>>
遍历form表单里面的表单元素,取其value
查看>>
PHP TP框架基础
查看>>
directive ngChecked
查看>>
面试110道题
查看>>
python 08 文件操作
查看>>
强势解决:windows 不能在本地计算机中起动Tomcat参考特定错误代码1
查看>>
Gradle 配置debug和release工程目录
查看>>
spring mvc处理ios 请求头不全时空参 无法解析的问题处理
查看>>
SpringBoot RabbitMq集成
查看>>
使用webmagic构建一个分布式的爬虫
查看>>
c运算符和优先级
查看>>
TODO:一不顺眼就换字体Go之代码篇
查看>>
Linux设备驱动程序编写
查看>>