标签: eclipse-memory-analyzer

使用Admob插页式广告时内存泄漏

我有服务,将在特定时间点显示活动,在每13次活动后,我显示一个admob插页式广告.显示插页式广告时,我的应用程序的RAM使用量增加了20MB,之后没有收集垃圾.在接下来的第13次显示另一个插页式广告时,服务内存不会增加.

我展示广告的代码:

public void loadAndShowInterstitialAd() {
        interstitial = new InterstitialAd(getApplicationContext());
        interstitial.setAdUnitId(AD_UNIT_ID);

        final AdRequest adRequest = new AdRequest.Builder()
                .build();

        Handler handler = new Handler(new Handler.Callback() {

            @Override
            public boolean handleMessage(Message msg) {
                interstitial.loadAd(adRequest);
                return true;
            }
        });

        if (handler != null) {
            handler.sendEmptyMessageDelayed(0, 200);
        }

        interstitial.setAdListener(new AdListener() {
            @Override
            public void onAdLoaded() {
                super.onAdLoaded();
                displayInterstitial();
            }

        });
    }

    public void displayInterstitial() {
        if (interstitial.isLoaded()) {
            interstitial.show();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在下面的堆栈溢出问题中尝试了一些解决方案,但没有任何方法可以帮助我.

Android Admob插页式内存泄漏

Android AdMob导致内存泄漏?

memory android memory-leaks eclipse-memory-analyzer android-activity

9
推荐指数
2
解决办法
2215
查看次数

解释 Eclipse 内存分析器

我已经使用该工具运行了我的一个堆文件,下面是 Leak Hunter 的结果。嫌疑人 2 我猜是由于我正在池化的性质,所以连接一直有效。我无法很好地理解嫌疑犯 1,因为当我按下详细信息时,它会给出一长串以下详细信息

java.lang.ref.Finalizer @ 0xf5e19670 40 92,688 
next java.lang.ref.Finalizer @ 0xf5e1a6a8 40 93,024 
next java.lang.ref.Finalizer @ 0xf5e1bda0 40 122,768 


Suspect 1.

The class "java.lang.ref.Finalizer", loaded by "<system class loader>", occupies 1,337,176 (30.93%) bytes. The memory is accumulated in one instance of "java.lang.ref.Finalizer" loaded by "<system class loader>".

Keywords
java.lang.ref.Finalizer


Suspect 2
 6 instances of "com.mysql.jdbc.JDBC4Connection", loaded by "sun.misc.Launcher$ExtClassLoader @ 0xf58bf000" occupy 432,624 (10.01%) bytes. 

Biggest instances:

•com.mysql.jdbc.JDBC4Connection @ 0xf61c54f8 - 94,864 (2.19%) bytes. 
•com.mysql.jdbc.JDBC4Connection @ …
Run Code Online (Sandbox Code Playgroud)

java memory-leaks memory-management eclipse-memory-analyzer

7
推荐指数
0
解决办法
1232
查看次数

eclipse内存分析器看到整个堆转储的小部分(363,2MB)(8GB)

我试图调查java.lang.OutOfMemoryError: GC limit exceeded在tomcat中部署的Web应用程序的高负载下发生的情况.堆大小设置为8GB(-Xms2048m -Xmx8192m)

在某些时候,由于GC活动开销,我们的应用程序变得无法响应.我可以在日志中看到Full GC连续多次出现.所以我用以下命令(jmap -F -dump:format=b,file=/root/dump2.hprof 4963)进行了堆转储.包含dump的文件大小为9GB.在转储(app冻结约45分钟)后,发生了多个完整的GC直到OutOfMemoryError被抛出.

这是GC活动的对数样本

[Full GC [PSYoungGen: 932096K->875513K(1864128K)] [ParOldGen: 5592447K->5592447K(5592448K)] 6524543K->6467961K(7456576K) [PSPermGen: 112285K->112285K(262144K)], 12.3954040 secs] [Times: user=47.60 sys=0.43, real=12.39 secs]
[Full GC [PSYoungGen: 932096K->890562K(1864128K)] [ParOldGen: 5592447K->5592447K(5592448K)] 6524543K->6483009K(7456576K) [PSPermGen: 112285K->112285K(262144K)], 12.6131900 secs] [Times: user=48.45 sys=0.49, real=12.61 secs]
[Full GC [PSYoungGen: 932096K->895268K(1864128K)] [ParOldGen: 5592447K->5592447K(5592448K)] 6524543K->6487715K(7456576K) [PSPermGen: 112285K->112285K(262144K)], 12.9488670 secs] [Times: user=49.61 sys=0.46, real=12.95 secs]

Heap
 PSYoungGen      total 1864128K, used 896698K [0x0000000755560000, 0x0000000800000000, 0x0000000800000000)
  eden space 932096K, 96% …
Run Code Online (Sandbox Code Playgroud)

java garbage-collection heap-dump eclipse-mat eclipse-memory-analyzer

7
推荐指数
2
解决办法
5383
查看次数

如何在Heap文件中找到局部变量

我有一个j2ee应用程序并通过visualVM进行监控.

让我们说我有这样的方法:

public void doStuff(int param) {
    String s = getStringVariable(param);
    StringBuilder sb = new StringBuilder();
    //Do stuff with sb object
}
Run Code Online (Sandbox Code Playgroud)

从线程点击,我可以看到我的一些线程卡在上面的方法中.所以我已经生成了一个堆转储文件来找出s和sb包含的内容.

但是我该怎么做呢?我正在使用Eclipse Memory Analyzer.

java visualvm heap-dump eclipse-memory-analyzer

7
推荐指数
1
解决办法
2892
查看次数

Memory Analyzer(MAT)插件无法自动在MAT Eclipse 4.1.2中打开堆教程

Eclipse SDK

Version: 4.1.2
Build id: M20120223-0900
Memory Analyzer 1.1.1.201108240735  Eclipse Memory Analyzer
Run Code Online (Sandbox Code Playgroud)

嗨,我已经将我的eclipse更新到最新版本,也安装了Eclipse MAT插件但是当我点击"转储HPROF文件"时,它不会在MAT中打开,而是让我选择保存HPROF文件.

以前它会在eclipse MAT中自动打开它.请告诉我如何解决这个问题?

我也切换到"内存分析"的角度,并尝试打开HPROF文件,但它会引发我跟踪错误

Error opening heap dump 'com.game.hprof'. Check the error log for further details.
Error opening heap dump 'com.game.hprof.hprof'. Check the error log for further details.
Unknown HPROF Version (JAVA PROFILE 1.0.3) (java.io.IOException)
Unknown HPROF Version (JAVA PROFILE 1.0.3)
Run Code Online (Sandbox Code Playgroud)

eclipse android eclipse-memory-analyzer

6
推荐指数
3
解决办法
7709
查看次数

17.8 MiB堆分配用于简单的"Hello World"项目?

我猜这里有一个明显的答案......我对此感到困惑:

为什么我所做的就是分配17.8 MiB堆内存:

  1. 使用Eclipse的New Project选项创建了一个简单的"Hello World"项目.
  2. 并添加了56 KiB背景图像.

如果我取出android:background="@drawable/background4"线路,分配的内存将降至11.9 MiB.

  • 系统分配这么多内存是否正常?我应该担心吗?
  • 什么会占用这么多堆?

我也对它进行了MAT报告,但我不确定从中得出什么结论:

提前致谢,

heap android garbage-collection heap-memory eclipse-memory-analyzer

6
推荐指数
1
解决办法
527
查看次数

Eclipse Memory Analyzer主饼图中的剩余是什么?

我刚刚开始学习Android的内存管理.在我正在处理的应用程序上进行内存转储并使用Eclipse Memory Analyzer进行分析之后,我发现37MB(50M保留内存中的内存)被"剩余"占用.这个50M的数字与我的logcat保留的内存相匹配,所以我猜这个Remainder会占用一些内存:

GC_CONCURRENT freed 12839K, 21% free 50038K/62908K, paused 7ms+15ms, total 144ms
Run Code Online (Sandbox Code Playgroud)

有人知道这个剩余物通常是由什么构成的吗?这可能是我有一些内存泄漏的迹象吗?

memory android memory-leaks memory-management eclipse-memory-analyzer

6
推荐指数
1
解决办法
2174
查看次数

Eclipse:MAT错误

我正在开发一个Android应用程序.其中我试图首次使用MAT找出内存泄漏.我评论了以下链接.

链接

直到第3步它的工作.但是当我尝试运行第4步时,我在日食中遇到错误.错误日志是:

org.eclipse.core.runtime.CoreException: Plug-in "org.eclipse.mat.ui" was unable to instantiate class "org.eclipse.mat.ui.snapshot.editor.HeapEditor".
at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.throwException(RegistryStrategyOSGI.java:194)
at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:188)
at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905)
at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55)
at org.eclipse.ui.internal.WorkbenchPlugin.createExtension(WorkbenchPlugin.java:274)
at org.eclipse.ui.internal.registry.EditorDescriptor.createEditor(EditorDescriptor.java:235)
at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:318)
at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.createPart(CompatibilityPart.java:266)
at org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor.createPart(CompatibilityEditor.java:61)
at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:304)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56)
at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:877)
at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:857)
at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:119)
at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:333)
at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:254)
at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:162)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:102)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:71)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:53)
at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:129)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:949)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:633)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:735)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:706)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:700)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:685)
at …
Run Code Online (Sandbox Code Playgroud)

android memory-leaks eclipse-mat eclipse-memory-analyzer android-memory

6
推荐指数
1
解决办法
203
查看次数

无法转换hprof转储

我尝试将转储从Android设备监视器转换为Eclipse内存分析器格式.我用下一个命令

hprof-conv dump.hprof converted-dump.hprof
Run Code Online (Sandbox Code Playgroud)

我得到错误

hprof-conv: command not found
Run Code Online (Sandbox Code Playgroud)

我在一个/platform-tools文件夹中这样做.当我在另一台计算机上运行相同的命令时,一切正常.问题是什么?

android memory-leaks memory-dump eclipse-memory-analyzer

6
推荐指数
1
解决办法
1544
查看次数

java Web应用程序中的内存泄漏

我有一个使用hibernate 3.6.4和spring 3.2.4(mvc,tx和security)的web应用程序,并且在tomcat 7中运行.每当我部署更新版本的应用程序而不重新启动tomcat时,则使用的内存由tomcat增加约50MB.

我创建了一些堆转储并使用Eclipse Memory Analyzer进行分析.我发现每次重新部署应用程序时,都会创建一个新的WebappClassLoader实例.但即使在我使用tomcat管理器停止应用程序之后,WebappClassLoader仍然保留在内存中,并且不会被垃圾回收.因此,在每次重新部署之后,额外的WebappClassLoader将保留在内存中并使用大约50MB的内存.

我使用Eclipse Memory Analyzer来查找从WebappClassLoader到GC根的引用路径.在结果中,我找不到任何可能阻止WebappClassLoaders被垃圾回收的强引用.

在此输入图像描述

那么,是什么让WebappClassLoaders保持活力?我可以在哪里调查,以找出什么阻止垃圾收集的WebappClassLoader?

我认为可能有一个阻塞的finalize()方法阻止GC完成垃圾收集.但我怎么能检查这个?

java memory-leaks classloader tomcat7 eclipse-memory-analyzer

6
推荐指数
1
解决办法
2692
查看次数