Newsgroup: it.comp.java
Titolo: Memoria disponibile per gli oggetti

Buon giorno a tutti,
sto scrivendo un'applicazione java computazionalmente molto pesante (č una
rete neurale).
L'algoritmo che ho elaborato risulterebbe drammaticamente piů leggero se
faccio il caching di una serie di risultati. Ovviamente questo comporta un
uso di memoria molto sostanzioso... Non sono in condizioni di fare delle
stime, in questo momento, ma l'ordine di grandezza č di un migliaio di
oggetti, ciascuno contenente una matrice 20x20 di double (ma forse anche
molto piů grande, 100x100... o piů...).
Volevo sapere: immaginando ovviamente di farlo girare su una macchina con
sufficiente memoria RAM, l'ambiente di runtime di java č in grado di gestire
automaticamente simili richieste di memoria, o ci sono limitazioni
predefinite?
Grazie
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Inviato viahttp://
arianna.libero.it/usenet/
non vorrei dire una castroneria (correggetemi se sbaglio) ma che io
sappia il limite di heap che java puo utilizzare non ha limite (se non
le dimensioni fisiche di memoria). Non ricordo se lo heap risiede in
ram o sul disco. Mi sembra che sia in ram. Ci sono dei parametri da
passare alla macchina virtuale per impostare le dimensioni iniziali e
massime dello heap. Dovresti consultare la documentazione in linea
riguardante le performance della Java Virtual Machine. Ho dato una
letta veloce e la documentazione (
http://java.sun.com/docs/books/jvms/
second_edition/html/Overview.doc.html#15730) dice:
3.5.3 Heap
The Java virtual machine has a heap that is shared among all Java
virtual machine threads. The heap is the runtime data area from which
memory for all class instances and arrays is allocated.
The heap is created on virtual machine start-up. Heap storage for
objects is reclaimed by an automatic storage management system (known
as a garbage collector); objects are never explicitly deallocated. The
Java virtual machine assumes no particular type of automatic storage
management system, and the storage management technique may be chosen
according to the implementor's system requirements. The heap may be of
a fixed size or may be expanded as required by the computation and may
be contracted if a larger heap becomes unnecessary. The memory for the
heap does not need to be contiguous.
A Java virtual machine implementation may provide the programmer or
the user control over the initial size of the heap, as well as, if the
heap can be dynamically expanded or contracted, control over the
maximum and minimum heap size.5
The following exceptional condition is associated with the heap:
If a computation requires more heap than can be made available by the
automatic storage management system, the Java virtual machine throws
an OutOfMemoryError. 3.5.3 Heap
The Java virtual machine has a heap that is shared among all Java
virtual machine threads. The heap is the runtime data area from which
memory for all class instances and arrays is allocated.
The heap is created on virtual machine start-up. Heap storage for
objects is reclaimed by an automatic storage management system (known
as a garbage collector); objects are never explicitly deallocated. The
Java virtual machine assumes no particular type of automatic storage
management system, and the storage management technique may be chosen
according to the implementor's system requirements. The heap may be of
a fixed size or may be expanded as required by the computation and may
be contracted if a larger heap becomes unnecessary. The memory for the
heap does not need to be contiguous.
A Java virtual machine implementation may provide the programmer or
the user control over the initial size of the heap, as well as, if the
heap can be dynamically expanded or contracted, control over the
maximum and minimum heap size.5
The following exceptional condition is associated with the heap:
If a computation requires more heap than can be made available by the
automatic storage management system, the Java virtual machine throws
an OutOfMemoryError.
i parametri per gestire le dimensioni dello heap sono:
-Xms##m --> imposta le dimensioni iniziali dello heap in ## MB di
spazio.
-Xmx##m --> imposta le dimensioni massime allocabili dello heap in ##
MB di spazio.

 sufficiente memoria RAM, l'ambiente di runtime di java è in grado di gestire


 VM) non hai problemi con l'ordine di grandezza dei dati che hai indicato.
Grazie, dunque non mi devo troppo preoccupare... Meno male!
Finora ho eseguito solamente dei piccoli test, quindi non ho toccato nulla
della configurazione della VM, non ce n'era motivo... Non so dove andare a
dichiarare la quantità di memoria massima, ma farò un po' di ricerche...
Grazie mille della risposta precisa e tempestiva :-)


 ..................
Grazie anche a te,
penso che proverò a far girare l'applicazione senza toccare la
configurazione della heap (tanto lo spazio di memoria viene allocato tutto
all'inizio, quando creo i miei oggetti), poi in caso di eccezioni andrò a
cercare come allargare la heap...


 Grazie mille della risposta precisa e tempestiva :-)
Per la JVM di sun i parametri che ti interessano sono -Xmx e -Xms.
Per cominciare guarda quì:
http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/java.html