我试图分析一直让我疯狂数周的内存泄漏,我发现了eclipse MAT工具可以帮助你弄清楚什么是错的,问题是我发现的每一个教程都说我需要转换格式从dalvik到HPROF格式的文件 ,但是我找不到一个单独的教程解释了如何实际做到这一点,而是我得到了这样模糊的东西
现在您将获得的文件不符合"标准"Sun .hprof格式,但是以Dalvik自己的格式编写,您需要将其转换为:
hprof-conv heap-dump-tm-pid.hprof 4mat.hprof
这究竟意味着什么?我点击什么?我要去哪?我完全迷失和沮丧,任何帮助都会走很长的路,谢谢.
我正在为Android Honeycomb编写一个内存密集型应用程序,并且尽可能地对recycle()未使用的Bitmaps 进行了非常小心的处理.实际上,这对于应用程序来说是必要的,因为Bitmaps不断地循环进出内存.但是,我刚刚实现onConfigurationChanged()了Activity,因此(由于多种原因)我试图将内存释放例程放入其中onStop().
目前我的onStop()方法:
Views来显示默认值Drawable;recycle()对Bitmap以前使用的这些小号View秒;Bitmaps的引用.不幸的是,使用Eclipse内存分析器,它似乎对内存使用没有任何影响.
你可以想象,我已经做了很多努力,用一种名义上垃圾收集的语言来释放资源,我希望能有更多的效果.所以我的问题是:做recycle()什么?它是否实际上触发了垃圾收集,或者系统是否会保留在内存中 - 即使你调用System.gc()-until它感觉需要摆脱某些东西?
NB我知道Bitmaps实际上并没有被保存在常规堆中,但我认为调用recycle()足以确保它们被从本机堆中删除.
答案的一部分
我发现如果一个ImageView包含Bitmap已经被回收的Bitmap数据,那么数据仍会保留在内存中,直到setImageBitmap(null)被调用ImageView.甚至可能是这种情况,如果setImageResource(...)或被setImageDrawable(...)调用(它们是在一个相对较小的九个补丁中加载 - 但是,MAT分析显示这并没有删除Bitmap包含在私有成员中的大数据ImageView).简单地调用此函数onStop()已经从我们的应用程序堆中剔除了大约10MB.显然,这可能不适用于预装的Honeycomb版本的Android.
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) 我正在制作我的第一款Android游戏,它将成为一款使用opengl es的3D街机游戏.我已经做了很长时间的工作,主要是为了未来的灵活性优化发动机.
无论如何,现在我完全已经完成了游戏功能和所有漂亮的东西,但它落后于不是我的调试手机的手机.该游戏拥有相当高质量的手机游戏图形,所以预计会有一点点落后,但是在Nexus S上运行游戏和在MyTouch 4G上运行游戏之间的性能差异是巨大的.这款游戏甚至不能在像LG Optimus这样的低端手机上播放(游戏运行,但它太过波涛汹涌,不能轻松玩).在我的Nexus SI上很少会出现波动(我在游戏中实现了帧率独立运动)但是在MyTouch 4G上它更常见,虽然游戏仍然可以播放......但是很烦人
我来自桌面游戏开发背景,优化从来没有引起我的兴趣.你能推荐什么来帮助我加快比赛速度?
我尽可能地尝试优化代码,并且性能得到了显着改善,但似乎有一些我错过或忽略的东西.它是一个巨大的游戏,具有完整的引擎和大量的代码.
我已经尝试跟踪所有分配并确保它们在运行时没有被释放或忘记,以便在播放时不会调用GC.多数民众赞成基本上我能想到的所有,我不知道还有什么可以使它lagg
而且我怀疑它是网格的聚合数,因为即使它们是高质量的,我在游戏中添加了一个选项,让你可以选择低,中,高的图形质量,就像电脑游戏一样,低和高之间的差异介于600-900个顶点之间!我注意到的唯一改进是加载时间.此外,没有任何特殊的后处理效果,灯光,着色器,实时SSS或其中任何一种.只是纹理面孔:P
我正在做的"lagg"随机冻结.我很确定他们是GC,但它可能是别的,因为我认为我已经找到并控制了所有的分配(有很多).由于我的游戏是独立于帧速率的,每当它解冻时,玩家和敌人以及所有东西都"向前跳"以保持同步,这使得已经很难的游戏变得更加困难!
我是剖析和优化的新手.我如何使用android调试工具(或其他第三方工具)来更好地了解我的游戏在运行时的表现,以及何时/为什么它会冻结以便我可以修复它们.
此外,奖金问题:):有没有办法让我看到它如何在没有手机或知道拥有它们的人的情况下在其他手机上执行?比如,即使我没有Droid X也没有我知道的任何人,它在Droid X上的速度有多快