如何知道线程占用了多少内存

elune 2006-01-09 03:04:18
如何知道线程占用了多少内存,或者问题可以扩展到一个对象实例占用了多少内存?
由单例的RunTime类可以知道虚拟机环境里的占用内存总量,剩余多少内存.但是如果能够监控某个实例内存占用量无疑对优化系统有巨大的好处.
...全文
549 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuzl32 2006-01-10
  • 打赏
  • 举报
回复
做了个小测试,不知道准确否.
几次运行均同一结果.
class Ems
{
private String[] strArr;

public Ems()
{
strArr = new String[10000];
for (int i = 0; i < strArr.length; i ++)
strArr[i] = new String("Hello World! i="+i);
}
}

public class MemTest
{
public static void main(String[] args)
{
long start,end;
Runtime rt = Runtime.getRuntime();
rt.gc(); // 垃圾回收
start = rt.freeMemory();
System.out.println("start="+start);
Ems ems = new Ems();
end = rt.freeMemory();
System.out.println("end ="+end);

System.out.println("end - start=" + (start - end));

System.out.println("单个String对象占的内存为:"+((start - end)/10000.0));
}
}

F:\>javac MemTest.java

F:\>java MemTest
start=1936472
end =762120
end - start=1174352
单个String对象占的内存为:117.4352

F:\>java MemTest
start=1936472
end =762120
end - start=1174352
单个String对象占的内存为:117.4352

F:\>
crazycy 2006-01-10
  • 打赏
  • 举报
回复
如果是编码中这个...java本身似乎没有,第三方的暂时没有使用过
jingweicool 2006-01-10
  • 打赏
  • 举报
回复
学习啊
elune 2006-01-10
  • 打赏
  • 举报
回复
谢谢各位大虾的关注。这两天我也在baidu上爬了很久没有一个确切的答案
yuzl32(Hello!有酒醉)的例子中JVM只main一个线程.到了复杂的系统里就不准确了.我们是否可以对线程内所有基本数据求和得到内存占用的近似值呢?比如 字符串占内存是 str.length*8;整型占内存32b(这由平台决定)。
benq998 2006-01-09
  • 打赏
  • 举报
回复
在java中向达到这个目的好像很难啊。真的找找第三方类库了。
elune 2006-01-09
  • 打赏
  • 举报
回复
谢谢 crazycy(代言人)大虾的热心回复,但是我问的是编码中如何输出线程占用的内存.如果java标准类库中不能支持,是否有免费的第三方类库? 国内能用的起JB的人不多,我还是用记事本(开玩笑,起码也是eclipse)编码.而且Optimize Suite对于web应用开发进行调试也不方便.
crazycy 2006-01-09
  • 打赏
  • 举报
回复
使用JB带的Optimize.Suite组件的Thread Debugger功能可以做到这个目标
flysky1112 2006-01-09
  • 打赏
  • 举报
回复
学习!
superslash 2006-01-09
  • 打赏
  • 举报
回复
mark

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧