草庐IT

android - 在android内存监视器中, `total count` 和 `heap count` 有什么区别?

在googledocs,它表示,heapcount表示所选堆中的实例数,而totalcount表示未完成的实例总数。所选堆是什么?始终,总计数大于堆计数,那么,除了堆中的对象之外,其他对象在哪里? 最佳答案 Android中有3个堆:应用图片合子TotalCount是所有3个堆的总数。HeapCount是当前选定堆中的对象数。参见https://developer.android.com/studio/profile/am-hprof.html 关于android-在android内存监

android - 确定 Android GC 何时运行

有谁知道是否有办法识别(在代码中,而不是LogCat)GC何时运行?也许一个Intent被解雇了?我可以分析LogCat输出,但如果我可以确定GC何时从我的代码运行,那将是理想的。 最佳答案 您可以使用弱引用技巧来做到这一点:WeakReferencemGcWatcher=newWeakReference(newGcWatcher());longmLastGcTime;classGcWatcher{@Overrideprotectedvoidfinalize()throwsThrowable{handleGc();mLastGcTi

java - 使用局部变量与字段对 GC 的影响

我在onDraw()方法的调用堆栈中有一个向下3层的方法。每次重绘调用数百次,有时数千次。我已经对onDraw()方法进行了广泛的分析,我可以看到以下方法占总数的14%,因此绝对值得一看。我需要在缩放和拖动操作期间提高帧速率。privatevoidgetVisiblePointsFromPath(){doublelongRads=longitude*(Math.PI/180);doublelatRads=latitude*(Math.PI/180);...}当方法退出并且double超出范围时,我假设它们符合GC的条件,尽管我知道这可能发生的时间是不确定的。这样做有什么好处吗:publ

c# - 单体机器人 : Performing a full GC

我尝试创建我的小粒子系统。我有带有粒子列表的ParticleManager并在Canvas上绘制我的粒子。我只在init()函数中创建了任何新对象,如Paint等!如果粒子大小for(intparticle=0;particle0?true:false{particles[particle]=null;//hereItriedallvariationslike//((IDisposable)particles[particle]).Dispose();//GC.SuppressFinalize(particles[particle]);//System.GC.ReRegisterFor

android - 内存泄漏 ;对象没有 GC 根

我正在尝试解决我的应用程序中的内存泄漏问题。使用Eclipse内存分析器。由于OOM错误,我的应用程序在一段时间后崩溃。最大的嫌疑似乎是我使用的9个ViewFlippers。在分析器中查看它们时,检查员说它没有GC根。这是否意味着它不会被垃圾收集器清理?如果是这样,我将如何解决这个问题......手动清除它们?或者更好的是,我如何将它包含在GCroot中?我在内存分析方面还很陌生,所以可以使用一些技巧。 最佳答案 实际上恰恰相反,“NoGCrootfound”,意味着该对象不再被引用,所以垃圾收集器将在下次运行时清理它。观看这个很棒

android - GC 和 onTouch 在通过 ndk 使用 ffmpeg 的应用程序中导致致命信号 11 (SIGSEGV) 错误

我在使用FFmpeg和NDK时遇到了一个令人讨厌但众所周知的错误:A/libc(9845):Fatalsignal11(SIGSEGV),code1,faultaddr0xa0a9f000intid9921(AsyncTask#4)更新几个小时后,我发现问题可能有两个来源。一个与多线程有关。我检查了它并修复了它。现在,应用仅在视频播放(ndk)开启时崩溃。我在触摸事件中放置了一个“计数器”surfaceSterowanieKamera.setOnTouchListener(newView.OnTouchListener(){intcounter=0;@Overridepublicboo

android - 添加依赖后"GC Overhead limit exceeded"

类似于thisquestion,我收到以下错误:[INFO]---android-maven-plugin:3.3.0:dex(default-dex)@betodef-android---[INFO]/usr/lib/jvm/java-6-sun-1.6.0.32/jre/bin/java[-Xmx1024M,{snip}[INFO][INFO]UNEXPECTEDTOP-LEVELERROR:[INFO]java.lang.OutOfMemoryError:GCoverheadlimitexceeded这是在我向我的Android项目添加了几个依赖项(包括fastutil)之后发生

java - Android GC 考虑因素——GC 何时运行,是否可以从代码中跟踪其运行状态?

我一直在寻找描述DalvikVM垃圾收集器架构的详细设计文档,但没有找到太多。考虑到GC运行的性能影响,我真的很想更好地理解5个具体问题:1.Android中究竟是什么触发了GC?我见过的其他VM实现通常允许在GC收到运行信号之前将一定比例的系统内存分配给应用程序。然而,扫描以下LogCat似乎显示DalvikGC至少部分地经常运行——12-1411:34:57.753:D/dalvikvm(279):GC_EXTERNAL_ALLOCfreed735objects/54272bytesin90ms12-1411:34:57.893:D/dalvikvm(279):GC_EXTERNA

Android:GC 不尊重 SoftReferences?

看起来Dalvik的垃圾收集器不尊重SoftReferences并尽快删除它们,就像WeakReferences一样。我还不是100%确定,但尽管事实上仍有大约3MB的可用内存,但在我在LogCat中看到“GCfreedbla-bla-blabytes”后,我的SoftReferences被清除了。此外,我还看到了MarkMurphy的评论here:Exceptthatitdoesn'tworkonAndroid,atleastinthe1.5timeframe.IhavenoideaiftheGCSoftReferencebugshavebeenfixed.SoftReference

android - 由于 Android GC 性能而改变编码风格,有多远是太远了?

我一直听说Android应用程序应该尽量限制创建的对象数量,以减少垃圾收集器的工作量。您可能不希望创建大量对象来跟踪有限的内存占用,这是有道理的,例如在传统的服务器应用程序上,在几秒钟内创建100,000个对象并非闻所未闻。问题是我应该走多远?我已经看到大量依赖静态的Android应用程序示例,以便据称“加快速度”。将需要进行垃圾收集的实例数量从几十个增加到数百个真的会有那么大的不同吗?我可以想象改变我的编码风格,现在创建数十万个对象,就像您在成熟的Java-EE服务器上可能拥有的那样,但依靠一堆静态来(据说)减少要被垃圾收集的对象的数量似乎奇怪。为了创建高性能Android应用,真正