为什么我要使用 HPROF 查看器和分析器查找 "Duplicate Strings"?
Why would I want to find "Duplicate Strings" with HPROF Viewer and Analyzer?
使用 Android 内存监视器,尤其是它的 "Dump Java Heap" 功能,我目前正在寻找我的应用程序中的内存泄漏。在 Android Studio 的 dump/HPROF 视图左侧,有一个打开 "Analyzer Tasks" 的选项,您可以在那里告诉机器 "Detect Leaked Activities" 和 "Find Duplicate Strings"。我对后一种选择感到困惑。它有什么作用,有什么用?它一定比仅仅帮助我们中间那些将相同字符串两次放入其资源文件夹中的笨拙开发人员更复杂。 docs 在这里不是很有帮助(如果我的搜索足够彻底的话),因为他们只说它在 "where the target program has strings that repeat values" 的情况下有帮助。什么时候会这样?
据我所知,这只是指出内存中的重复字符串。但是,这不仅仅适用于查找将相同字符串输入多个资源的情况。例如,作为 Java 中的 Strings are immutable,您很容易得到比您最初意识到的更多的字符串实例。如果您的应用程序有很多字符串连接代码但不使用 StringBuilder,或者如果您的应用程序进行了任何 string/text 处理,那么很容易导致意外地大量 space 被字符串占用。但相反,为了获得一些 space 的回报,通常可以相对容易地进行优化(一旦您可以看到问题所在)。所以你可以说这个任务更多的是关于内存 'optimization',而不是寻找泄漏。
使用 Android 内存监视器,尤其是它的 "Dump Java Heap" 功能,我目前正在寻找我的应用程序中的内存泄漏。在 Android Studio 的 dump/HPROF 视图左侧,有一个打开 "Analyzer Tasks" 的选项,您可以在那里告诉机器 "Detect Leaked Activities" 和 "Find Duplicate Strings"。我对后一种选择感到困惑。它有什么作用,有什么用?它一定比仅仅帮助我们中间那些将相同字符串两次放入其资源文件夹中的笨拙开发人员更复杂。 docs 在这里不是很有帮助(如果我的搜索足够彻底的话),因为他们只说它在 "where the target program has strings that repeat values" 的情况下有帮助。什么时候会这样?
据我所知,这只是指出内存中的重复字符串。但是,这不仅仅适用于查找将相同字符串输入多个资源的情况。例如,作为 Java 中的 Strings are immutable,您很容易得到比您最初意识到的更多的字符串实例。如果您的应用程序有很多字符串连接代码但不使用 StringBuilder,或者如果您的应用程序进行了任何 string/text 处理,那么很容易导致意外地大量 space 被字符串占用。但相反,为了获得一些 space 的回报,通常可以相对容易地进行优化(一旦您可以看到问题所在)。所以你可以说这个任务更多的是关于内存 'optimization',而不是寻找泄漏。