Come si ottimizza l'utilizzo della dimensione heap di un'applicazione che ha molti (milioni) di oggetti longevi? (Grande cache, il caricamento di un sacco di record da un db)Come si rende efficiente la memoria dell'applicazione Java?
- utilizzare il tipo di dati a destra
- Evitare java.lang.String per rappresentare altri tipi di dati
- Evita duplicato oggetti
- Utilizzare le enumerazioni se i valori sono noti in anticipo
- Utilizzare pool di oggetti
- String.Intern() (buona idea?)
- carico/mantenere solo gli oggetti necessari
Sto cercando per la programmazione generale o risposte specifiche Java. Nessun interruttore del compilatore funky.
Edit:
Ottimizzare la rappresentazione memoria di un POJO che può apparire milioni di volte nel mucchio.
I casi d'uso
- carico un enorme file CSV in memoria (convertito in POJO)
- Usa Hibernate per recuperare milioni di record da un database
Curriculum di risposte:
- Utilizzare il modello di peso vivo
- Copia su scrittura
- Invece di caricare oggetti 10M con 3 proprietà, è più efficiente disporre di 3 matrici (o altra struttura dati) di dimensione 10 M? (Potrebbe essere un problema manipolare i dati ma se hai davvero poca memoria ...)
scrivendo il vostro programma in assembly ... :) –
dubito che assembler avrebbe aiutato - i tempi di sviluppo sarebbe significativamente più lungo e non sarebbe cross platform. ;) – Fortyrunner
@Fortyrunner Sospetto che Desmond stia facendo uno scherzo. –