今日在resin的dump heap中发现大量的char[]和byte[]对象:
引用
1.0000 112.922M 7.613M 105.309M 166308 java.util.HashMap
0.8115 97.763M 97.763M 0.000M 483874 char[]
0.7928 89.842M 89.842M 0.000M 15243 byte[]
0.7869 88.862M 16.175M 72.687M 706694 java.util.HashMap$Entry
0.5190 58.608M 11.225M 47.382M 490447 java.lang.String
0.3688 41.640M 9.187M 32.453M 170271 java.util.HashMap$Entry[]
0.2521 28.465M 0.021M 28.444M 455 com.caucho.db.store.ReadBlock
加起来竟然有200M之大,马上就想起了一个低层的截字符串的函数使用了byte[]和char[],而且使用率非常频繁,平均每个页面都会调用100-150次左右。
public static String subContentStringOrial(String str, int targetCount,String more)
{
if (str == null)
return "";
int initVariable = 0;
StringBuffer restr = new StringBuffer();
if (str.length() <= targetCount)
return str;
String s1=null;
byte[] b;
char[] tempchar = str.toCharArray();
for (int i = 0; (i < tempchar.length && targetCount > initVariable); i++) {
s1 = String.valueOf(tempchar[i]);
b = s1.getBytes();
initVariable += b.length;
restr.append(tempchar[i]);
}
if (targetCount == initVariable || (targetCount == initVariable - 1)) {
restr.append(more);
}
return restr.toString();
}
发现byte[] b和char[] tempchar 使用完后没有释放(本人不太相信GC),手动释放一下,在return 前加:
b = null;
tempchar = null;
s1=null;
引用
1.0000 112.989M 7.625M 105.364M 166567 java.util.HashMap
0.7867 88.893M 16.189M 72.704M 707325 java.util.HashMap$Entry
0.5333 60.252M 60.252M 0.000M 497341 char[]
0.5281 59.665M 11.515M 48.151M 503080 java.lang.String
0.4842 54.709M 54.709M 0.000M 17755 byte[]
0.3689 41.682M 9.209M 32.473M 170534 java.util.HashMap$Entry[]
重构后虽然变小了,但也很大。不知道是哪个地方使用了char[]和byte[],或者其它包使用了又没有释放。
分享到:
- 2008-08-27 08:36
- 浏览 2792
- 评论(7)
- 论坛回复 / 浏览 (7 / 7008)
- 查看更多
相关推荐
通过分析heapdump文件,我们可以找出占用内存较大的对象,追踪内存泄漏的源头,以及了解对象生命周期和垃圾收集情况。 要生成heapdump,可以使用JVM内置的命令行选项,例如`-XX:+HeapDumpOnOutOfMemoryError`来配置...
2. **分析Heap Dump**:生成的heapdump文件通常较大,包含大量信息,此时heapdump-tool工具能够解析这些数据,提供直观的报告,帮助开发者找出内存占用过高的对象,识别潜在的内存泄漏。 3. **内存分析**:heapdump...
当程序运行时遇到内存问题,如频繁的垃圾回收或内存溢出,生成heap dump可以帮助开发者找出内存占用异常的对象,从而定位内存泄漏的源头。 IBM提供了强大的内存分析工具,例如VisualVM和MAT (Memory Analyzer Tool)...
它能够帮助开发者理解内存消耗模式,找出可能的内存泄漏源。 PMA的主要特性包括: 1. **模式匹配**:内置多种内存泄漏模式,如“长生命周期对象持有短生命周期对象”等,自动识别可能的问题。 2. **内存使用趋势**...
在处理heapdump文件时,调试器能够加载这个文件,并提供界面或者API供用户分析内存使用情况,找出那些没有被释放的内存块。 在处理heapdump文件的过程中,一般会遵循以下步骤: 1. **生成heapdump**:在程序运行...
HeapAnalyzer是一款Java内存分析工具,由IBM开发,它可以帮助开发者检查和分析Java堆内存的状态,找出可能存在的内存泄漏或者过度占用内存的对象。通过分析heap dump文件,HeapAnalyzer可以展示对象的分布情况,识别...
在Java应用程序运行过程中,如果出现内存占用过高或者内存泄露的情况,堆转储(Heap Dump)文件就会变得尤为重要,因为它记录了程序在特定时间点的内存状态。IBM HeapDump Analyser能帮助我们解析这些文件,从而深入...
4. 通过这些信息,可以识别哪些对象占用了大量内存,从而找出可能的内存泄漏点或过度使用的数据结构。 5. 结合WebSphere的应用日志和其他监控数据,进一步分析问题原因并制定解决方案。 总的来说,IBM WebSphere的...
通过这个快照,它可以显示所有对象及其引用关系,以便找出那些占用大量内存但未被释放的对象。 2. **对象概览**:提供一个概览视图,列出了所有类及其实例数量和内存占用。这有助于快速识别可能存在内存泄漏的类。 ...
在ha25.zip中,可能包含了这样的heapdump文件,它能帮助我们找出哪些对象占用了大量内存,或者是否存在无法释放的内存。 "readme25.zip"可能是一个包含分析指南或步骤的文档,它将指导用户如何解析heapdump文件,...
- **IBM Memory Analyzer (MAT)**: 这是IBM提供的专业heapdump分析工具,能够帮助开发者识别内存泄漏,计算对象引用链,提供内存占用报告等。 - **JConsole**: 虽然不是IBM官方工具,但也是Java标准监控工具之一,...
5. **分析文件**:生成的javacore和heapdump文件可以用专门的分析工具打开,如IBM Heap Analysis Tool (HAT),Eclipse Memory Analyzer (MAT)等,它们能提供可视化的分析结果,帮助找出问题。 6. **注意问题**:在...
通过比较不同时间点的heapdump,可以追踪对象生命周期,找出导致内存持续增长的原因。 2. **对象统计与分析**:该工具能够统计各种类别的对象数量,以及它们占用的总内存,帮助用户识别可能存在问题的对象类型。 3...
2. **支配树分析**:通过支配树,我们可以找出哪些对象占用了最多的内存,并追踪它们的引用链,从而识别出可能导致内存泄漏的对象。 3. **碎片分析**:MAT可以帮助我们检测堆内存中的碎片,这可能会影响垃圾收集的...
4. **对象比较**:对比两个不同时间点的heap dump,找出对象数量或大小有显著变化的部分。 5. **内存指纹**:识别重复数据,例如大量相同的字符串常量或大对象,可能暗示内存浪费。 除了这些核心功能,HeapAnalyzer...
找出泄漏的原因可能涉及忘记释放内存、保留了过期的指针引用、循环引用等问题。 6. **修复内存泄漏**: 识别出泄漏后,修复工作就相对简单了。可能是修改代码以确保每次分配都有对应的释放,或者调整数据结构以...
这些工具可以帮助我们找出内存泄漏的根源,例如查找长时间存活且占用大量内存的对象,或者查看是否有大量的重复对象实例。 内存溢出的原因可能有多种: 1. **过大对象或集合**: 创建了非常大的单个对象,或者集合类...
HeapAnalyzer是IBM提供的一款免费的内存分析工具,它能够分析IBM J9虚拟机生成的heapdump文件,帮助开发者找出内存泄漏、过度对象分配和内存碎片等问题。通过可视化界面,用户可以直观地查看内存中的对象分布,...
- **进行堆转储**:在怀疑存在内存泄漏的情况下,可以通过jVisualVM进行堆转储(Heap Dump)。随后,可以将不同时间点的堆转储文件进行比较,找出哪些对象在持续增长。 - **对比两个堆转储文件**:使用“与另一个堆...
2. **Dominator Tree**:这个视图显示了对象之间的支配关系,帮助我们找出占用内存最大的对象。 3. **Top Consumers**:列出占用内存最多的对象和类,便于我们定位问题。 4. **OQL (Object Query Language)**:MAT...