View Full Version : [java] Aumentare lo spazio heap
Optimus89
12-09-2010, 09:37
Salve a tutti,
Ho scritto un programma dove ad un certo punto deve creare una matrice di interi (700k*700k)... (forse è troppo grande? :mc: )
Ben cmq il mio portatile ha una capacità di 4g, e se provo ad aumentare lo spazio riservato per la macchina virtuale più di 1.5g mi dice che non si può riservare cosi tanto spazio... Grazie per le risposte...
DanieleC88
12-09-2010, 10:08
Quasi 2GB di matrice è un po' tantino! :D
Sicuro di non poter modificare il funzionamento del codice per utilizzare meno spazio?
Ad ogni modo:
-Xmxn
Specify the maximum size, in bytes, of the memory allocation
pool. This value must a multiple of 1024 greater than 2MB.
Append the letter k or K to indicate kilobytes, or m or M to
indicate megabytes. The default value is chosen at runtime
based on system configuration. For more information, see
HotSpot Ergonomics
Examples:
-Xmx83886080
-Xmx81920k
-Xmx80m
On Solaris 7 and Solaris 8 SPARC platforms, the upper limit for
this value is approximately 4000m minus overhead amounts. On
Solaris 2.6 and x86 platforms, the upper limit is approximately
2000m minus overhead amounts. On Linux platforms, the upper limit
is approximately 2000m minus overhead amounts.
Dovresti poter specificare tranquillamente un quantitativo di memoria pari a 2000MB, che errori ti dà?
Optimus89
12-09-2010, 10:52
Devo salvare i pesi di un grafo... L'esercizio l'avrei anche risolto in modo più dinamico, creando un insieme di nodi, dove ogni nodo ha una lista di nodi e bla bla bla... però ho letto negli appunti che è molto più efficiente in termini di tempo sviluppare in modo statico il problema e quindi l'ho rifatto così...
dopo aver dato il comando:
>java -Xmx2g miaclasse
salta fuori:
Error occured during initialization of VM
Could not reserve enough space for object heap
Could not create the java virtual machine.
DanieleC88
12-09-2010, 10:55
Guarda che il suffisso "g" non mi sembra che sia accettato... Rileggi il pezzo di manuale che ti ho ricopiato su! :)
Prova ad usare "-Xmx2000m".
Optimus89
12-09-2010, 12:43
Mi da lo stesso errore...
Devo salvare i pesi di un grafo... L'esercizio l'avrei anche risolto in modo più dinamico, creando un insieme di nodi, dove ogni nodo ha una lista di nodi e bla bla bla... però ho letto negli appunti che è molto più efficiente in termini di tempo sviluppare in modo statico il problema e quindi l'ho rifatto così...
dopo aver dato il comando:
salta fuori:
Fregatene... spesso è molto più importante avere un programma che sia efficiente in termini di spazio piuttosto che di tempo.
Il tempo è potenzialmente illimitato, lo spazio no.
wingman87
12-09-2010, 13:24
700k*700k=49*10^10
Ponendo che un intero occupi almeno 4byte vengono circa 2*10^12 byte = circa 2 tera (se non ho contato male).
700K * 700K = 490.000M.
4B * 490.000M = 1960G.
Sono quasi 2 Terabyte :eek: .
wingman87
12-09-2010, 16:40
700K * 700K = 490.000 K
Hai perso un K:
700K*700K = 700^2*K^2 = 490.000.000 K = 490 G
Niente, hai ragione te :asd:
Correggo.
Optimus89
17-09-2010, 16:43
Grazie a tutti ho risolto alla fine!!!
Salve a tutti,
Ho scritto un programma dove ad un certo punto deve creare una matrice di interi (700k*700k)... (forse è troppo grande? :mc: )
Ben cmq il mio portatile ha una capacità di 4g, e se provo ad aumentare lo spazio riservato per la macchina virtuale più di 1.5g mi dice che non si può riservare cosi tanto spazio... Grazie per le risposte...
Felice che tu abbia risolto cmq 1.5-1.8GB è un limite della JVM Java di SUN.
E non ci puoi andare oltre qualunque macchina tu abbia.
Se vuoi usare più ram (Heap Memory) le soluzioni sono:
Usare la JVM di Oracle (ok ora sono entrambe di Oracle, cmq io intendevo JRockit)
Usare la versione 64 bit della JVM, ma questo richiede che tu abbia anche un OS a 64bit e tu non l'hai specificato.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.