您的位置:首页 > 编程语言 > Java开发

java获取JVM对象实例的个数和占用空间大小

2016-08-25 17:34 501 查看
RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();
String name = bean.getName();
int index = name.indexOf('@');
String pid = name.substring(0, index);
//这里要区分操作系统
HotSpotVirtualMachine machine = (HotSpotVirtualMachine) new            sun.tools.attach.WindowsAttachProvider().attachVirtualMachine(pid);
InputStream is = machine.heapHisto("-all");

ByteArrayOutputStream baos = new ByteArrayOutputStream();
int readed;
byte[] buff = new byte[1024];
while((readed = is.read(buff)) > 0)
baos.write(buff, 0, readed);
is.close();

machine.detach();
System.out.println(baos);


输出:

num     #instances         #bytes  class name
----------------------------------------------
1:         19474        2107032  [C
2:           524        2080784  [I
3:          7500        1026288  <methodKlass>
4:          7500         924248  <constMethodKlass>
5:           564         624576  <constantPoolKlass>
6:          1581         441592  [B
7:           564         403464  <instanceKlassKlass>
8:           504         394880  <constantPoolCacheKlass>
9:         10176         244224  java.lang.String
10:          3500          84000  java.lang.StringBuilder
11:           635          77456  java.lang.Class
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java