Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-08-2010, 11:58   #1
Lim
Senior Member
 
L'Avatar di Lim
 
Iscritto dal: Dec 2000
Messaggi: 501
[Java] Esaurire lo Heap Space

Salve a tutti,
sto sviluppando un simulatore in Java che deve tener conto del comportamento di un elevato numero di oggetti.

Con simulazioni di test, nessun problema, ma quando comincio a fare simulazioni realistiche (ho provato al momento con qualche migliaio di oggetti), esaurisco lo Heap in pochissimo tempo, incappando nell'errore:

java.lang.OutOfMemoryError: Java heap space

Come potrei risolvere il problema? Dal task manager vedo che la simulazione non eccede mai i 290MB circa di RAM...
Ho provato a modificare il file eclipse.ini ma non è cambiato nulla, con valori bassi di Xmx256m o Xmx384m, mentre per valori molto superiori non avvia Eclipse...

Esistono altri metodi per poter gestire decine di migliaia di oggetti o per aumentare lo Heap?
Lim è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2010, 12:13   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Lim Guarda i messaggi
Come potrei risolvere il problema? Dal task manager vedo che la simulazione non eccede mai i 290MB circa di RAM...
Ho provato a modificare il file eclipse.ini ma non è cambiato nulla, con valori bassi di Xmx256m o Xmx384m, mentre per valori molto superiori non avvia Eclipse...
Non avvia Eclipse?

Comunque non sono i parametri per lo heap space di Eclipse che devi impostare ma i parametri dello heap space da allocare all jvm per la tua applicazione: quindi non credo tu debba toccare tanto eclipse.ini quanto i parametri da riga di comando da passare a java, quando viene lanciata la tua applicazione.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2010, 12:16   #3
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Non avvia Eclipse?
Non avevo capito che era per i - valori molto alti -, pensavo fosse per i 300 e rotti MB
Probabilmente hai usato valori che, al momento dell'avvio di Eclipse, eccedevano la RAM disponibile sulla macchina...
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2010, 12:20   #4
Lim
Senior Member
 
L'Avatar di Lim
 
Iscritto dal: Dec 2000
Messaggi: 501
Eppure ho 4GB di ram, al lancio di Eclipse ne era occupata circa il 40%...
Avevo impostato 1400, in teoria dovevano essere diponibili...
Lim è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2010, 15:58   #5
Lim
Senior Member
 
L'Avatar di Lim
 
Iscritto dal: Dec 2000
Messaggi: 501
Ho effettuato anche un'altra prova e ho constatato che la memoria non viene liberata neanche invocando il garbage collector.

Spendo due parole per descrivere a grandi linee il Simulatore.
Una classe (il main) gestisce il motore dell'applicazione invocando ad ogni istante temporale un certo numero di operazioni sugli oggetti viventi.
Ogni oggetto vivente viene inserito, alla sua creazione, in una lista della classe main (ad esempio: listaDegliOggettiViventi).

Alla fine di ogni step temporale, il simulatore invoca il Garbage Collector con il comando System.gc();
Al termine di un istante temporale scelto arbitrariamente (ad es: il 100°) ho "distrutto" il 90% degli oggetti esistenti, tagliando i loro riferimenti presso il metodo main (ho svuotato la lista...).

Dal Task Manager di Windows non si rilevano rilasci di memoria. Rimane sempre occupata al massimo raggiunto da quella esecuzione. In teoria, avendo tagliato i riferimenti agli oggetti, questi non dovrebbero venire distrutti immediatamente? (Invoco io il GC e non attendo i tempi della JVM)
Lim è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2010, 16:15   #6
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Sono un ignorantone: non so dire se alla fine di una "corsa" del GC la memoria che viene "liberata" (o meglio resa disponibile) viene a sua volta rilasciata al SO dalla JVM o la JVM, già che ce l'ha sottomano, se la tiene per se (la memoria è comunque libera e a disposizione: bisognerebbe conoscere le politiche di deallocazione della JVM) e quindi tu nel task Manager non vedi apprezzabili deallocazioni.

Comunque a scanso di eqivoci ricorda che System.gc() non invoca il Garbage Collector, ma "suggerisce" solo alla JVM di lanciarlo, con tutti i "per piacere, appena puoi, eh" del caso.

@EDIT:
per monitorare le cose potresti provare jconsolle (è uno dei "basic tool" distribuiti con il JDK).
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 03-08-2010 alle 16:21.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2010, 16:25   #7
Lim
Senior Member
 
L'Avatar di Lim
 
Iscritto dal: Dec 2000
Messaggi: 501
Eh, sono ignorante anch'io in materia . Quindi diciamo che non devo preoccuparmi se dal Task Manager non rilevo il rilascio della memoria.
Tanto non era quello il problema originale, volevo solo verificare che la distruzione andasse a buon fine, sperando di evitare il riempimento delle Heap.

Ora vedo cosa esce fuori con jconsolle...
Lim è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2010, 16:28   #8
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Lim Guarda i messaggi
Ora vedo cosa esce fuori con jconsolle...
E' la cosa migliore.

Ma avevi letto questo passaggio, vero?
Quote:
Comunque non sono i parametri per lo heap space di Eclipse che devi impostare ma i parametri dello heap space da allocare all jvm per la tua applicazione: quindi non credo tu debba toccare tanto eclipse.ini quanto i parametri da riga di comando da passare a java, quando viene lanciata la tua applicazione.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2010, 16:42   #9
Lim
Senior Member
 
L'Avatar di Lim
 
Iscritto dal: Dec 2000
Messaggi: 501
Si, l'avevo letto, ma non riesco a passarglieli. Ti spiego cosa ho fatto:

- Da console dei comandi sono entrato nella cartella contenente la classe "main".
- Ho provato a lanciare java -Xms... Xmx.... Test.class
Però mi restituisce un errore, non riesce a trovare la main class: "java.lang.NoClassDefFoundError: [...] Could not dind the main class: Test. Program will exit."

P.S. La mia classe main si chiama Test.class...
Lim è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2010, 16:48   #10
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Lim Guarda i messaggi
Si, l'avevo letto, ma non riesco a passarglieli. Ti spiego cosa ho fatto:

- Da console dei comandi sono entrato nella cartella contenente la classe "main".
- Ho provato a lanciare java -Xms... Xmx.... Test.class
Però mi restituisce un errore, non riesce a trovare la main class: "java.lang.NoClassDefFoundError: [...] Could not dind the main class: Test. Program will exit."

P.S. La mia classe main si chiama Test.class...
Posizionati nella cartella che contiene il package radice della tua gerarchia e passa il nome pienamente qualificato della classe.

Comunque Eclipse, in quanto IDE, di sicuro ti permette di personalizzare i parametri per il run (run configuration) da dentro l'ide... io non son pratico, sono dell'altra sponda.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2010, 16:48   #11
Tommo
Senior Member
 
L'Avatar di Tommo
 
Iscritto dal: Feb 2006
Messaggi: 1304
Perchè il comando è senza .class, devi scrivere Test e basta
__________________
*ToMmO*

devlog | twitter
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2010, 16:49   #12
dojolab
Senior Member
 
L'Avatar di dojolab
 
Iscritto dal: Jun 2010
Città: Varese
Messaggi: 996
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Comunque a scanso di eqivoci ricorda che System.gc() non invoca il Garbage Collector, ma "suggerisce" solo alla JVM di lanciarlo, con tutti i "per piacere, appena puoi, eh" del caso.
Ma LOL.
Ecco perché odio Java e annessi (ogni tanto me lo ricordo) .
__________________
Il mercatino di dojolab: VENDO UN PO' DI COSE! VAI
Vendo Libro Oracle 10g GUIDA COMPLETA della Oracle Press, ITALIANO: LINK
dojolab è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2010, 16:53   #13
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
[OT]
Quote:
Originariamente inviato da dojolab Guarda i messaggi
Ma LOL.
Ecco perché odio Java e annessi (ogni tanto me lo ricordo) .
Beh, è un motivo un po' debole per cassare in toto "Java e annessi".
E poi bisogna anche essere consci del perchè le cose funzionano come funzionano, prima di decidere, ma sui gusti non si discute

@EDIT:
[IT]
Chiaramente Tommo ha ragione. Anche quello va sistemato.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 03-08-2010 alle 17:22. Motivo: Syntax horror
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2010, 16:54   #14
Lim
Senior Member
 
L'Avatar di Lim
 
Iscritto dal: Dec 2000
Messaggi: 501
Quote:
Originariamente inviato da Tommo Guarda i messaggi
Perchè il comando è senza .class, devi scrivere Test e basta
Avevo provato in entrambi i modi , ma non va... (anche con le maiuscole...)
Lim è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2010, 17:01   #15
dojolab
Senior Member
 
L'Avatar di dojolab
 
Iscritto dal: Jun 2010
Città: Varese
Messaggi: 996
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
[OT]

Beh, è un motivo un po' debole per cassare in toto "Java e annessi".
E poi bisogna anche essere consci del perchè le cose funzionano come funzionano, prima di decidere, ma sui gusti non si discute
Beh non è l unico motivo, sia chiaro
E' uno dei tanti :P E poi giustamente i gusti sono gusti
__________________
Il mercatino di dojolab: VENDO UN PO' DI COSE! VAI
Vendo Libro Oracle 10g GUIDA COMPLETA della Oracle Press, ITALIANO: LINK
dojolab è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2010, 17:35   #16
Lim
Senior Member
 
L'Avatar di Lim
 
Iscritto dal: Dec 2000
Messaggi: 501
Quote:
Originariamente inviato da Lim Guarda i messaggi
Avevo provato in entrambi i modi , ma non va... (anche con le maiuscole...)
Nessuna idea a riguardo?
Lim è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2010, 17:40   #17
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Lim Guarda i messaggi
Nessuna idea a riguardo?
Scusa se insisto, hai letto questo?
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2010, 18:06   #18
Lim
Senior Member
 
L'Avatar di Lim
 
Iscritto dal: Dec 2000
Messaggi: 501
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Scusa se insisto, hai letto questo?
Accidenti, scusami!
Avevo letto solo i post degli altri 2 utenti ed il tuo mi si è confuso con quelli vecchi, non me ne ero proprio accorto!


Ma che intendi con "la cartella che contiene il package radice"?

Ho già fatto i seguenti tentativi:
Mi sono posizionato nella cartella \bin del package, ed ho usato il comando "java c:\workspace\prova\bin\Test",
questa prova l'ho fatta anche in \prova, senza entrare in \bin e anche da \src, ma chiamando Test.java.
Restituisce sempre lo stesso errore. Non ho mai lanciato un programma dalla console, ho sempre usato eclipse. Ora vedo se riesco ad impostare i parametri per il run direttamente da eclipse...
Lim è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2010, 18:41   #19
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Lim Guarda i messaggi
Accidenti, scusami!
Avevo letto solo i post degli altri 2 utenti ed il tuo mi si è confuso con quelli vecchi, non me ne ero proprio accorto!


Ma che intendi con "la cartella che contiene il package radice"?

Ho già fatto i seguenti tentativi:
Mi sono posizionato nella cartella \bin del package, ed ho usato il comando "java c:\workspace\prova\bin\Test",
questa prova l'ho fatta anche in \prova, senza entrare in \bin e anche da \src, ma chiamando Test.java.
Restituisce sempre lo stesso errore. Non ho mai lanciato un programma dalla console, ho sempre usato eclipse. Ora vedo se riesco ad impostare i parametri per il run direttamente da eclipse...
I file .java non vanno bene di sicuro, perchè tu vuoi lanciare "java" e non "javac".

Mi spiego meglio con un esempio, mi viene più semplice.
Immagina che io nel mio pc ho creato con Eclipse un progetto "JavaCourseFondamental" (Eclipse crea su disco una cartella con questo nome) nella mia cartella "eclipseProjects" che tengo nel disco fisso "C:\".
Al progetto ho aggiunto un package "exercises" in cui a sua volta ho creato una classe di nome "Main", e l'ho compilata.

Eclipse piazza il mio bel Main.class in una sottocartella che lui(Eclipse) chiama "bin", dentro la cartella del progetto, la famosa "JavaCourseFondamental" di prima.

Ovviamente la classe Main è dotata di entry point.
Per lanciarla da consolle faccio così:
Codice:
cd C:\eclipseProjects\JavaCourseFundamental\bin
java exercises.Main
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2010, 19:00   #20
Lim
Senior Member
 
L'Avatar di Lim
 
Iscritto dal: Dec 2000
Messaggi: 501
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
I file .java non vanno bene di sicuro, perchè tu vuoi lanciare "java" e non "javac".

Mi spiego meglio con un esempio, mi viene più semplice.
Immagina che io nel mio pc ho creato con Eclipse un progetto "JavaCourseFondamental" (Eclipse crea su disco una cartella con questo nome) nella mia cartella "eclipseProjects" che tengo nel disco fisso "C:\".
Al progetto ho aggiunto un package "exercises" in cui a sua volta ho creato una classe di nome "Main", e l'ho compilata.

Eclipse piazza il mio bel Main.class in una sottocartella che lui(Eclipse) chiama "bin", dentro la cartella del progetto, la famosa "JavaCourseFondamental" di prima.

Ovviamente la classe Main è dotata di entry point.
Per lanciarla da consolle faccio così:
Codice:
cd C:\eclipseProjects\JavaCourseFundamental\bin
java exercises.Main

Ti ringrazio per la pazienza e la spiegazione.
A mio avviso, l'unica differenza tra il tuo caso ed il mio è che io non ho creato il package, cioè in Eclipse le classi appartengono al Default Package, che non ha un nome vero e proprio...
Usando il tuo stesso comando non funziona (usando "default package".Main).
Sto cercando in rete se ha un altro nome o se è possibile lanciare da console il comando, ma non ho trovato ancora nulla
Lim è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Roscosmos ha lanciato il satellite meteo...
Starship Troopers: Ultimate Bug Wars, to...
Il razzo spaziale europeo Ariane 6, per ...
Oracle Fusion Cloud Applications si pote...
OHB Italia svilupperà un satellit...
Fortinet: "Ora abbiamo una chance d...
Linux Mint chiude con gli aggiornamenti ...
Compressori portatili auto in sconto su ...
Durante il lancio della missione USSF-87...
Dopo il ritiro di Intel da Magdeburgo, l...
Xiaomi 15T scende a 388€ su Amazon: 12GB...
MSI Afterburner: arriva il monitoraggio ...
Missione cinese Chang'e-6: confermata l'...
Addio esenzione sotto i 150 euro: l'UE i...
Allarme riavvii su Windows 11 dopo il ri...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:48.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v