Mar*_*cel 7 java garbage-collection
我想测量我的java应用程序中的内存分配数据,即分配的所有对象的大小总和.由于对象分配是在年轻一代完成的,这似乎是正确的地方.
我知道jconsole,我知道JMX bean,但我找不到正确的变量......目前我们正在解析gc日志输出文件,但这很难.理想情况下,我们想通过JMX测量它...
我怎样才能获得这个价值?
查德威克发表评论后的其他信息:
我想知道我的应用程序使用了多少内存.这是在JBoss Appserver中运行的相当大的软件.每隔4周就有一个新版本的软件,我们需要比较旧版本和新版本之间的内存消耗.仅仅比较特定时间的老一代的当前价值是不够的.了解分配了多少/更少的内存非常有用.由于许多物体在年轻一代中被收集,我需要在那里测量它.
与此同时,我对此有一个估计.我会发布它作为答案.
谢谢,马塞尔
这就是我的估计想法。它基本上返回“年轻集合的数量 x 年轻一代的大小”的值。它并不完美,但对于我的用例来说效果很好。
public long getYoungGenAllocatedMB() {
long youngMaxMemory;
long youngUsedMemory;
long youngCollectionCount;
List<MemoryPoolMXBean> beans = ManagementFactory.getMemoryPoolMXBeans();
for (MemoryPoolMXBean bean : beans) {
if ("Par Eden Space".equals(bean.getName())) {
MemoryUsage usage = bean.getUsage();
youngMaxMemory = usage.getMax();
youngUsedMemory = usage.getUsed();
break;
}
}
List<GarbageCollectorMXBean> gBeans = ManagementFactory.getGarbageCollectorMXBeans();
for (GarbageCollectorMXBean bean : gBeans) {
if ("ParNew".equals(bean.getName())) {
youngCollectionCount = bean.getCollectionCount();
break;
}
}
return (youngCollectionCount * youngMaxMemory + youngUsedMemory) / 1024 / 1024;
}
Run Code Online (Sandbox Code Playgroud)
感谢所有其他海报!
马塞尔
| 归档时间: |
|
| 查看次数: |
1799 次 |
| 最近记录: |