AndBie
AndBie

Reputation: 95

Can I get how much memory for my program remains?

My program has many works that need a lot of memory that I can't exactly know when I need to stop it, but in case there's very few memory left, I can force it stop using resources. So can I get how many remaining (in byte) memory that my program can use?

P/s: There's NO way to release the process memory. They need memory, as much as possible, and that is how it works (and, no trash for collector, since old ones still be need).

Upvotes: 4

Views: 755

Answers (4)

Kenny
Kenny

Reputation: 5542

Try something like:

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);

You can read more at this blog: http://huenlil.pixnet.net/blog/post/26872625

Upvotes: 9

Daniel Ryan
Daniel Ryan

Reputation: 7100

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;    
}

While not perfect it should do the trick for the most part.

Upvotes: 1

Haphazard
Haphazard

Reputation: 10948

Check out the tools that Android provides for memory tracking here.

Upvotes: 0

shaunhusain
shaunhusain

Reputation: 19748

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

Upvotes: 1

Related Questions