问题标签 [eclipse-memory-analyzer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - eclipse 内存分析器看到整个堆转储(8GB)的一小部分(363,2MB)
我试图调查java.lang.OutOfMemoryError: GC limit exceeded
在我们部署在 tomcat 中的 web 应用程序的高负载时发生的情况。堆大小设置为 8GB ( -Xms2048m -Xmx8192m
)
在某个时间点,由于 GC 活动开销,我们的应用程序变得无响应。我可以在日志中看到 Full GC 连续发生多次。所以我使用以下命令(jmap -F -dump:format=b,file=/root/dump2.hprof 4963
)进行了堆转储。包含转储的文件大小为 9GB。进行转储后(应用程序被冻结了大约 45 分钟),发生了多次完整的 GC,直到OutOfMemoryError
被抛出。
这是 GC 活动的日志示例
为了分析堆转储,我在 Eclipse 内存分析器 (MAT) 中打开了它。不幸的是,MAT 显示堆大小为 363.2MB(在概览选项卡或堆转储详细信息选项卡中),而根据 GC 日志,堆已填满 6467961K (6.4G)。Unreachable Objects Histogram 总共显示 75 511 736 (75 MB)。直方图视图也证实了浅堆的总数为 380 837 136 (363.2MB)
我的问题是,如果 GC 无法回收内存,为什么 MAT 不显示堆转储中的所有对象?
以下是 MAT 中导入的堆转储的屏幕截图:
eclipse-plugin - 如何在eclipse中安装MAT
无法弄清楚如何将 MAT(内存分析器工具)安装到 Eclipse 中。需要这个程序来分析我的 Android 应用程序正在泄漏的堆。
感觉很傻,对不起;-(
具体步骤是什么?
我应该在 Eclipse 中怎么做?选择 Android SDK 管理器或转到帮助 => 安装新软件 => 然后在字段中输入一个 url 字符串 ( http://download.eclipse.org/mat/1.1/update-site/ )?
两者都尝试过 - 现在似乎没有任何效果。
非常感谢您的描述:-)
android - 为什么我的 ViewPager 的 Fragment 被 FragmentActivity 保留
在我的FragmentActivity
中,我有一个Fragment
(我们称之为 HubFrag),它有一个ViewPager
using a FragmentStatePagerAdapter
(它创建了一些片段,我们称之为“ItemFrag”)。
当我用另一个新Fragment
的 HubFrag 替换 HubFrag 时,HubFrag 会像预期的那样被破坏,但 ItemFrags 对象并非如此。使用 eclipse mat 我看到我的 ItemFrags 对象被FragmentManagerImpl
我的一个FragmentActivity
……为什么保留???
我解释了为什么我不希望他们还在记忆中:
每个 ItemFrag 都会启动一个图片下载,而我的下载器(它有一个WeakReference
ItemFrag ImageView
)不想处理Bitmap
这个弱引用是否为空(以减少内存使用)。
但是下载器总是会解码,Bitmap
因为弱引用永远不会为空......谢谢!
java - JVM堆转储分析指向sun.awt.windows.WToolkit?
我正在分析我们应用程序中的内存泄漏。在使用Eclipse Memory Analyzer进行一些调查后,我认识到“保留”所有引用的根是 `
sun.awt.windows.WToolkit
现在我不知道如何解释这个结果。我认为 sun.awt.windows.WToolkit 不应该导致泄漏。也许有人建议如何解释这个结果?
我们尝试检查的一个想法是它是由我们使用的 JIDE 库引起的,http://www.jidesoft.com/但很难说它是否与它有关。
android - DDMS 透视图未显示以保存堆转储
谁能告诉我如何通过 DDMS 视角保存堆转储文件。单击“转储 HPROF 文件”按钮时,它没有显示任何保存文件的对话框。我想在内存分析器工具中使用这个 Hprof 文件。请尽快告诉我
android - 使用 1 Mb 堆的奇怪位图
出于好奇,我最近使用Eclipse 内存分析器测试了我的 Android 应用程序的内存泄漏。
我遇到了一个奇怪的位图,大小为512 x 512 像素,使用了大约 1 兆字节的设备堆内存。
我检查了我的 drawables 文件夹,但找不到那个大小 (512 x 512) 的位图。
我开始搜索并遇到了这个问题,用户解释了如何在内存分析器中获取“内存泄漏”引用背后的实际图像:
MAT (Eclipse Memory Analyzer) - 如何从内存转储中查看位图
我按照教程并在 GIMP 的帮助下提取了以下图像:
所以我的问题是:
- 那是什么?
- 它在我的应用程序堆中做什么?
- 我该如何摆脱它?
- 其他人在他的堆中有相同的位图吗?
笔记:
- 在我的drawables文件夹中没有看起来像那样的位图
- 我的应用程序使用的最大位图是 140 x 140 像素
- 我有一种感觉,这个 Bitmap 不知何故来自系统
- 位图在应用程序启动后立即处于堆中 - 无需任何用户交互
- 我在 HTC One S 上调试,Android 4.1 Cyanogen Mod(屏幕 540 x 960)
- 我没有使用外部库
更新:
在Selvin 的建议和我个人认为这可能是系统问题的帮助下,我测试了我的另外两个应用程序。
我测试的两个应用程序也在内存分析器中显示了相同的位图,消耗的字节数完全相同:
此外,我能够发现:
Bitmap 的来源始终与应用程序的 LAUNCHER Activity 相关联。
那么该怎么办呢?有没有办法摆脱它?
由于我在我的应用程序中执行内存密集型操作,我希望有尽可能多的可用堆。
android - 通用图像加载器中的内存泄漏问题
通过 MAT 分析
这是截图dominator_tree
java - 查找 java.lang.OutOfMemoryError 的根本原因:使用 Eclipse MAT 的 Java 堆空间
我试图找出哪个方法/循环在我的应用程序中给出了java.lang.OutOfMemoryError: Java heap space 。我对使用 Eclipse Memory Analyzer 分析 java 应用程序非常陌生。
在图像中,很明显调用 JNI Local 具有最大保留堆,但我们的应用程序中没有任何 JNI 调用。
请检查并确认内存泄漏是否是由调用任何本机代码(JNI 本地)或使用任何字符串迭代或其他任何原因引起的?
作为参考,我附上了 .hprof 文件的总概述和堆栈跟踪:
android - 当LinearLayout和Bitmap中发生泄漏时如何删除android App中的内存泄漏
我正在开发一个 Android 应用程序,我正在使用动态线性布局并在运行时在 Activity 中创建它们。数据是动态的,所以我必须动态地创建它们。我在 Eclipse 上使用了 MAT 工具来分析堆转储,并发现 LinearLayout 和 Bitmap 是以下快照中给出的顶级消费者和消耗空间。2 Leak Suspects 正在显示,Leak Suspects 在 LinearLayout 和 Bitmap 的内存分配中。
应用程序有时使用 30-40MB 的堆大小。
有时当我点击某个地方时,应用程序中会显示红色的深色边框
我无法理解如何删除所有内存泄漏。任何人都可以帮助我消除我的 Android 应用程序中的内存泄漏...
下面的快照将有助于更好地理解我的问题..
主要泄漏嫌疑人(通过 MAT 工具在 eclipse 上)
第二个泄漏嫌疑人
显示可能的内存浪费的系统加载程序
- 我的应用程序中的顶级内存消费者
我用来显示位图的代码
提前致谢..
android - 参考。浅堆在 MAT 中显示出非常高的价值
我是第一次使用 MAT,我已经通过 Google I/O 视频进行内存管理。但是,现在说到实用,我Ref. Shallow Heap
在merge shortest path to GC roots(Exclude weak reference)
. 我的一个应用程序组件在本专栏中显示出非常高的价值。所以,请告诉我它意味着什么以及它与shallow heap
.