2009-09-29 28 views

Respuesta

82

utiliza los argumentos -Xms<memory>-Xmx<memory>. Use M o G después de los números para indicar Megs y Gigs de bytes respectivamente. -Xms indica el mínimo y -Xmx el máximo.

+1

es posible que también desee ver MaxPermSize. – pmu

+54

pregunta por la memoria JVM. Lo que has dicho es el tamaño del montón. Ambos son diferentes – vsingh

+6

Para reiterar lo que otros comentarios mencionan, Xms y Xmx solo configuran el montón.Aunque la configuración de estas variables tiene un efecto indirecto en el espacio no dinámico, la persona que realiza la pregunta intenta establecer si hay una forma de configurar el uso total de memoria (montón + no-montón) – murungu

26

No debería tener que preocuparse por la pila que pierde la memoria (es muy poco común). El único momento en que puede hacer que la pila se salga de control es con recursividad infinita (o muy profunda).

Esto es solo el montón. Lo siento, no leí tu pregunta completamente al principio.

Debe ejecutar la JVM con el siguiente argumento de línea de comando.

-Xmx<ammount of memory> 

Ejemplo:

-Xmx1024m 

que permitirá un máximo de 1 GB de memoria de la JVM.

+0

Eso no es cierto, de acuerdo con este hilo, hay varias formas en las que se puede filtrar fuera del montón http://stackoverflow.com/questions/1475290/java-memory-mystery-do-i-have-a-leak – erotsppa

+0

Tiene razón, hay muchas maneras de tener problemas de memoria que no están relacionados con la pila. Sin embargo, no son muy comunes. – jjnguy

+5

Bastante seguro de que no puede controlar el tamaño de la memoria que no es de montón, ¿verdad? –

9

La respuesta anterior es algo así como correcta, no se puede controlar correctamente la cantidad de memoria nativa que asigna un proceso de Java. Depende de lo que está haciendo tu aplicación.

Dicho esto, dependiendo de la plataforma, es posible que pueda utilizar algún mecanismo, ulimit por ejemplo, para limitar el tamaño de un Java o cualquier otro proceso.

Simplemente no espere que falle correctamente si alcanza ese límite. Las fallas de asignación de memoria nativa son mucho más difíciles de manejar que las fallas de asignación en el montón de Java. Existe una posibilidad bastante buena de que la aplicación se cuelgue, pero depende de cuán crítico sea para el sistema mantener el tamaño del proceso bajo que podría ser adecuado para usted.

2

El NativeHeap puede increasded por -XX: MaxDirectMemorySize = 256M (por defecto es 128)

nunca he utilizado. Quizás lo encuentres útil.

+1

Dudo que op quería esto: la memoria nativa se usa cuando realiza una llamada al código C/C++ desde java. La memoria nativa –

+4

también se usa cuando se realizan llamadas nio si asigna los búferes con memoria directa. (... y classloaders, y la información del hilo ....) – stu

10

Si desea limitar la memoria de JVM (no el tamaño de la pila) ulimit -v

Para tener una idea de la diferencia entre JVM y la pila de memoria, echar un vistazo a este excelente artículo http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at-sizing-the-java-process.html

+6

¿'ulimit' es un comando de Linux? Hice una búsqueda rápida en Google y no vi ninguna relación entre 'ulimit' y la JVM. Y – Sam

+0

Sí, es comando de Linux. http://tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/x4733.html – vsingh

Cuestiones relacionadas