【问题标题】:Can I get how much memory for my program remains?我可以获得多少内存供我的程序使用吗?
【发布时间】:2011-06-24 16:58:00
【问题描述】:

我的程序有很多需要大量内存的工作,我无法确切知道何时需要停止它,但如果剩下的内存很少,我可以强制它停止使用资源。那么我能得到我的程序可以使用多少剩余(以字节为单位)内存吗?

P/s:没有办法释放进程内存。他们需要尽可能多的内存,这就是它的工作原理(而且,收集器没有垃圾,因为仍然需要旧的)。

【问题讨论】:

    标签: java android memory


    【解决方案1】:

    尝试类似:

    Debug.MemoryInfo memoryInfo = new Debug.MemoryInfo();
    Debug.getMemoryInfo(memoryInfo);
    
    String memMessage = String.format("Memory: Pss=%.2f MB,
        Private=%.2f MB, Shared=%.2f MB",
        memoryInfo.getTotalPss() / 1000,
        memoryInfo.getTotalPrivateDirty() / 1000,
        memoryInfo.getTotalSharedDirty() / 1000);
    

    您可以在此博客上阅读更多内容:http://huenlil.pixnet.net/blog/post/26872625

    【讨论】:

    • 谢谢,你的回答非常详细,还有其他有用的信息:)
    • 您能否将其标记为已回答,以便将其从未回答列表中删除。
    • 当然可以,但我需要等待 15 分钟 :)
    • 确实!忘记了! :)
    • 为什么要除以 1024?根据 Android Docs,结果以 kB(1000 的倍数)为单位,而不是 KB 或 KIB。 developer.android.com/reference/android/os/…en.wikipedia.org/wiki/Kilobyte
    【解决方案2】:

    http://www.javaspecialists.eu/archive/Issue029.html http://www.exampledepot.com/egs/java.lang/GetHeapSize.html

    【讨论】:

    • 谢谢,您的第二个链接对快速研究很有用。 +1 :)
    • 没问题,对不起,我没有写出任何东西并不意味着对你的简短,或者任何事情只是不知道这些页面可以解释的细节,有趣的问题。
    【解决方案3】:
    public static long getCurrentFreeMemoryBytes() {
         long heapSize =  Runtime.getRuntime().totalMemory();
         long heapRemaining = Runtime.getRuntime().freeMemory();   
         long nativeUsage  =  Debug.getNativeHeapAllocatedSize();
    
         return Runtime.getRuntime().maxMemory() - (heapSize - heapRemaining) - nativeUsage;    
    }
    

    虽然不完美,但大部分情况下它应该可以解决问题。

    【讨论】:

      【解决方案4】:

      查看 Android 提供的用于内存跟踪的工具 here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-08
        • 2014-03-02
        • 2020-12-20
        • 1970-01-01
        相关资源
        最近更新 更多