Uri
Uri

Reputation: 89839

How to get the max sizes of the heap and permgen from the JVM?

I am trying to find out programatically the max permgen and max heap size with which a the JVM for my program has been invoked, not what is currently available to them.

Is there a way to do that?

I am familiar with the methods in Java Runtime object, but its not clear what they really deliver.

Alternatively, is there a way to ask Eclipse how much was allocated for these two?

Upvotes: 7

Views: 5067

Answers (3)

Neil Coffey
Neil Coffey

Reputation: 21815

Try something like this for max perm gen:

public static long getPermGenMax() {
    for (MemoryPoolMXBean mx : ManagementFactory.getMemoryPoolMXBeans()) {
        if ("Perm Gen".equals(mx.getName())) {
            return mx.getUsage().getMax();
        }
    }
    throw new RuntimeException("Perm gen not found");
}

For max heap, you can get this from Runtime, though you can also use the appropriate MemoryPoolMXBean.

Upvotes: 8

pek
pek

Reputation: 18035

As for eclipse, try looking for a profiling tool. I think NetBeans has one by default.

Upvotes: 0

Arne Burmeister
Arne Burmeister

Reputation: 20614

Try this ones:

MemoryMXBean mem = ManagementFactory.getMemoryMXBean();
mem.getHeapMemoryUsage().getUsed();
mem.getNonHeapMemoryUsage().getUsed();

But they only offer snapshot data, not a cummulated value.

Upvotes: 7

Related Questions