2011-04-15 9 views
6

java acepta -Xmx1k felizmente como argumento, pero "los experimentos muestran" esto sigue siendo realmente algo así como un montón de 8MB.¿Cuál es el más pequeño que puede hacer un montón de Java (Oracle JVM)?

Google no encontró nada para usar, así que me pregunto, ¿cuál es el tamaño de almacenamiento dinámico más pequeño que puede exigir en Java?

Gracias, Eric

Editar:

Se parece variar un poco según la plataforma y la versión de Java. En mi Mac, con 1.6.0_24, el más pequeño que puedo configurarlo sin error es:

$ java -Xms1k -Xmx4097k -XX:NewSize=192k -cp . Foo 
5636096 

o aproximadamente 5.375M, donde Foo.java es simplemente:

public class Foo { 
    public static void main(String[] args) { 
     System.out.println(Runtime.getRuntime().totalMemory()); 
    } 
} 

Mi entorno es, por tanto:

$ uname -a 
Darwin turbo.local 10.7.0 Darwin Kernel Version 10.7.0: Sat Jan 29 15:17:16 PST 2011; root:xnu-1504.9.37~1/RELEASE_I386 i386 
$ java -version 
java version "1.6.0_24" 
Java(TM) SE Runtime Environment (build 1.6.0_24-b07-334-10M3326) 
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02-334, mixed mode) 

Como ya he mencionado en un comentario más abajo, me estaba poniendo un pequeño montón tratando de verificar que un algoritmo muy caro utilizaba casi sin memoria, sin tratar de ahorrar dinero.

Gracias por las respuestas - Me sentí abatido por lo poco útil que surgió cuando intenté googlear esto.

+0

Nunca lo he visto configurar menos de 32 MB, eso también en los días. Sin embargo, nunca intenté averiguar el mínimo. – lobster1234

Respuesta

2

menos que esté trabajando en un dispositivo móvil extremadamente limitada (en cuyo caso usted debe hacer su prueba en ese dispositivo), incluso de 8 MB no es mucho

Un servidor cuesta alrededor de $ 70/GB o cerca de 50 centavos por 8 MEGABYTE.

Correr con opciones -mx1m -XX:NewSize=256k La siguiente

System.out.println(Runtime.getRuntime().totalMemory()/1024); 

imprime

2304 

que es de 2,25 MB.

No olvide que el montón no es la aplicación completa. Tiene permgen y comparte bibliotecas para incluir en el tamaño total.

+0

No estaba realmente preocupado por el dinero, solo estaba probando un algoritmo que estaba bastante seguro era pesado en el lado de la velocidad de la compensación de velocidad por el espacio, así que estaba tratando de establecer el tamaño máximo de almacenamiento dinámico lo más bajo posible para confirmar que todavía funcionaba. Pero, por supuesto, preguntarle a la JVM cuánta memoria tiene es el camino a seguir, gracias. –

+0

@ Peter Lawrey: $ 70/GB por qué? ¿Estás hablando del precio para comprar ECC RAM? ¿Estás teniendo en cuenta el consumo de energía del ariete? ¿Es por mes? ¿Por año? Esa es realmente una declaración extraña, creo, y realmente no entiendo cómo se relaciona el precio con la pregunta formulada :) (comentario honesto:) – SyntaxT3rr0r

+0

@ SyntaxT3rr0r, No debería tener que preocuparse por 8 MB de memoria a menos que tenga una sistema muy restringido. El costo de la memoria es muy pequeño. La memoria es reutilizable, pero tu tiempo no es. Por "$ 70/GB" me refiero a $ 70 por GB. Puede comprar un servidor de proveedor de nombre con 8 GB por ~ $ 560 y un servidor de 1 TB por alrededor de $ 70K con aproximadamente el mismo consumo de energía que el servidor que está utilizando ahora. –

2

No, no lo acepta "felizmente".

[email protected]:~/NetBeansProjects$ /usr/local/jdk1.6.0_20/bin/java -Xmx1k 
Error occurred during initialization of VM 
Too small initial heap 

Esta es Oracle JVM 1.6.0_20

Mi "experimento", muestra que nada menos que -Xmx5M le da ese error.

EDIT: Experimenté más ... -Xmx4100k parece volar.

+0

Intente reducir NewSize a 512k,;) –

+0

$ java -Xmx1k -cp. Foo hola, mundo ebowman @ turbo 09:52:28 15/04 ~/src/lógica $ java -version versión java "1.6.0_24" Java (TM) SE Runtime Environment (build 1.6.0_24-b07 -334-10M3326) Java HotSpot (TM) Servidor de 64 bits VM (compilación 19.1-b02-334, modo mixto) –

Cuestiones relacionadas