Ho avuto una chiamata di un cliente lo scorso fine settimana che mi diceva che il loro programma Java non rispondeva quando eseguiva un'importazione di dati. I dati sono una semplice cartella di lavoro di Excel con 4 fogli di lavoro. Tutti i dati vengono letti dalle colonne e aggiunti a un database.Combattere la dimensione dell'heap Java, grande differenza tra Java localmente e Java web start
Così ho iniziato a indagare e ho avuto alcuni strani risultati.
- Testare l'importazione utilizzando Esegui in Netbeans. Questo utilizza Java esempio a 64 bit:
Prima esecuzione
Seconda manche
- Test l'importazione utilizzando Java Web Start. Questo è stato lanciato con l'apertura di un file JNLP e utilizza un Java un'istanza a 32 bit:
Prima esecuzione
In questo caso ho avuto lo stesso problema, che il cliente è stato segnalazione, il programma ha smesso di rispondere dopo un po 'durante il processo di importazione. Ciò è dovuto al fatto che sto raggiungendo la dimensione massima dell'heap per quanto posso dire (cerchio rosso).
Seconda manche
Così ho deciso di aumentare la dimensione heap iniziale e dimensione massima heap aggiungendo quanto segue al mio file JNLP: initial-heap-size="512m" max-heap-size="1024m"
. Quando ho provato nuovamente l'importazione, tutto sembrava funzionare, però ho notato c'è molto di più memoria utilizzata rispetto ai primi 2 casi:
- Perché c'è una differenza 300MB di utilizzo della memoria tra caso 1 e 2 rispetto al caso 4?
- L'elevato utilizzo della memoria è il risultato di una programmazione errata o di una perdita di memoria? O è normale avere valori così alti?
- È l'aggiunta di
initial-heap-size="512m" max-heap-size="1024m"
una soluzione valida per questo problema?
@StackFlowed Ne dubito molto. – Kayaman