社区
Java SE
帖子详情
如何知道线程占用了多少内存
elune
2006-01-09 03:04:18
如何知道线程占用了多少内存,或者问题可以扩展到一个对象实例占用了多少内存?
由单例的RunTime类可以知道虚拟机环境里的占用内存总量,剩余多少内存.但是如果能够监控某个实例内存占用量无疑对优化系统有巨大的好处.
...全文
575
9
打赏
收藏
如何知道线程占用了多少内存
如何知道线程占用了多少内存,或者问题可以扩展到一个对象实例占用了多少内存? 由单例的RunTime类可以知道虚拟机环境里的占用内存总量,剩余多少内存.但是如果能够监控某个实例内存占用量无疑对优化系统有巨大的好处.
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
【java】java 一个
线程
占用
多少
内存
1.概述 偶然看到一个信息,说java的
线程
默认
占用
1M
内存
。然后我就查了查
线程
堆栈也会申请
内存
。堆栈大小由 -Xss 选项指定,默认每个
线程
1M,幸运的是情况并非那么糟糕。操作系统会以延迟分配的方式分配
内存
页面,比如在第一次使用时分配,因此实际使用的
内存
要低得多,通常每个
线程
堆栈
占用
80至200KB。 还有其他 JVM 部件会
占用
本地
内存
,但它们在总
内存
消耗中通常比例不大。 2.验证 2.1 验证 什么都不做的验证 @Test public void threadSizeTest21() t.
java
线程
占用
的空间_一个jvm
线程
占用
多少操作系统
内存
找到关键点在看到12452个等待在CachedBnsClient.run的业务的一瞬间笔者就意识到,肯定是这边的
线程
导致对外
内存
泄露了。下面就是根据
线程
大小计算其泄露
内存
量是不是确实能够引起OOM了。发现
内存
计算对不上由于我们这边设置的Xss是512K,即一个
线程
栈大小是512K,而由于
线程
共享其它MM单元(
线程
本地
内存
是是现在
线程
栈上的),所以实际
线程
堆外
内存
占用
数量也是512K。进行如下计算:...
java 一个
线程
占多少
内存
_一个jvm
线程
占用
多少操作系统
内存
找到关键点在看到12452个等待在CachedBnsClient.run的业务的一瞬间笔者就意识到,肯定是这边的
线程
导致对外
内存
泄露了。下面就是根据
线程
大小计算其泄露
内存
量是不是确实能够引起OOM了。发现
内存
计算对不上由于我们这边设置的Xss是512K,即一个
线程
栈大小是512K,而由于
线程
共享其它MM单元(
线程
本地
内存
是是现在
线程
栈上的),所以实际
线程
堆外
内存
占用
数量也是512K。进行如下计算:...
[多
线程
] Windows和Linux中一个
线程
占用
多少
内存
之前有看到网上的文章,说在linux中一个
线程
占用
8M的
内存
。也有文章说这种说法不对。这里简单看一下,windows和linux中,一个
线程
占多大。
Linux下创建一个
线程
占用
多少
内存
在前面的博客进程分配资源中,我们了解到,在32位平台下,系统会给一个进程分配4G的虚拟
内存
供进程使用。 因此,我们
知道
,一个进程被创建时将被分配有4G的虚拟
内存
。事实上,并不是每次都会用完这4G
内存
的,下面的例子可以看到。 #include <stdio.h> #include <unistd.h> int main(){ while(1){ ...
Java SE
62,634
社区成员
307,269
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章