【发布时间】:2011-06-24 16:58:00
【问题描述】:
我的程序有很多需要大量内存的工作,我无法确切知道何时需要停止它,但如果剩下的内存很少,我可以强制它停止使用资源。那么我能得到我的程序可以使用多少剩余(以字节为单位)内存吗?
P/s:没有办法释放进程内存。他们需要尽可能多的内存,这就是它的工作原理(而且,收集器没有垃圾,因为仍然需要旧的)。
【问题讨论】:
我的程序有很多需要大量内存的工作,我无法确切知道何时需要停止它,但如果剩下的内存很少,我可以强制它停止使用资源。那么我能得到我的程序可以使用多少剩余(以字节为单位)内存吗?
P/s:没有办法释放进程内存。他们需要尽可能多的内存,这就是它的工作原理(而且,收集器没有垃圾,因为仍然需要旧的)。
【问题讨论】:
尝试类似:
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
【讨论】:
http://www.javaspecialists.eu/archive/Issue029.html http://www.exampledepot.com/egs/java.lang/GetHeapSize.html
【讨论】:
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;
}
虽然不完美,但大部分情况下它应该可以解决问题。
【讨论】:
查看 Android 提供的用于内存跟踪的工具 here。
【讨论】: