2009-01-11 13 views
7

Estoy tratando de averiguar programáticamente el máximo permgen y el tamaño máximo de almacenamiento dinámico con el que se ha invocado una JVM para mi programa, no lo que está actualmente disponible para ellos.¿Cómo obtener los tamaños máximos del montón y el permgen de la JVM?

¿Hay alguna manera de hacerlo?

Estoy familiarizado con los métodos en el objeto Java Runtime, pero no está claro lo que realmente ofrecen.

Alternativamente, ¿hay alguna manera de preguntarle a Eclipse cuánto se asignó para estos dos?

Respuesta

7

Pruebe este pequeños:

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

Pero sólo ofrecen datos de la instantánea, no es un valor cummulated.

+1

Tenga en cuenta que la memoria que no es en montón también incluye la memoria caché de código, que está separada de la generación permanente. (al menos en la JVM de Sun) –

0

En cuanto a eclipse, intente buscar una herramienta de creación de perfiles. Creo que NetBeans tiene uno por defecto.

+0

Estoy tratando de hacer esto desde un programa para poder advertir a los usuarios si utilizan menos de lo que mi plugin requerirá. – Uri

+0

No entendí tu pregunta. Creo que esta es una mejor respuesta. – pek

8

intentar algo como esto para la ondulación permanente máx 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"); 
} 

Para almacenamiento dinámico máximo, se puede obtener esta información de tiempo de ejecución, aunque también se puede utilizar el MemoryPoolMXBean apropiado.

+1

Tenga cuidado ya que si activa CMS, el nombre del bean MX es "CMS Perm Gen". Puede reemplazar el "Perm Gen" .equals (mx.getName()) por mx.getName(). EndsWith ("Perm Gen") para que funcione también en ese caso. –

+0

No sé de qué depende, pero para mí esto es "PS Perm Gen". :-) –

Cuestiones relacionadas