Diciamo che ho un'applicazione che mantiene le relazioni tra gli oggetti - pensa a un albero delle relazioni genitore-figlio. La discendenza di questi oggetti è fondamentale, quindi mantenere i riferimenti da Object A <-> Object B <-> Object C
è molto importante. Non posso lasciare che il GC ripulisca nessuno di questi oggetti. L'accesso ai dati è molto sensibile al tempo e questo albero può crescere molto, molto grande. Per avere accesso immediato a questi dati, ovviamente ho dovuto farlo a spese della memoria e sappiamo tutti cosa porta inevitabilmente a ...
Prima di esplorare soluzioni come Spark, Hadoop, database, memorizzazione nella cache o altri motori di archiviazione / elaborazione dati, vorrei capire meglio come Java gestisce la memoria e se ci sono soluzioni immediate che potrebbero spremere un po 'più di succo del mio attuale design.
Diciamo solo che ogni oggetto rappresenta un Person
. Contiene dettagli su quella persona come primo / medio / ultimo nome, data di nascita, luoghi che hanno visitato nell'ultimo decennio, marca / modello del veicolo corrente, ecc. Fondamentalmente una varietà di String
, Integer
, Boolean
, tipi di dati. E poi ovviamente hai Parent
e Children
che sono riferimenti ad altri oggetti Person
.
Quando ho deciso che un oggetto Person
o uno dei suoi figli non sono stati richiesti per circa X tempo, vorrei comprimere questi oggetti in qualcosa di molto più gestibile (rispetto alla memoria) ma ancora mantenere il contesto sulla persona e le sue relazioni per la velocità.
Quindi, prima di iniziare questo percorso (richiede un po 'di refactoring), sto cercando di pensare alla migliore soluzione possibile, se possibile.
Sarebbe come prendere tutti i campi e archiviarli in una matrice Byte[]
con metodi di serializzazione / deserializzazione per comprimere & decomprimere i dati quando devono essere letti ridurre qualsiasi quantità di memoria notevole? Ho bisogno di un modo per mantenere la relazione di Object B
in modo che Object A
e Object C
sappiano l'un l'altro mantenendo le informazioni di Object B
al minimo assoluto ma comunque prontamente disponibili.
Spero di aver fornito abbastanza contesto alla mia domanda e non sia stato troppo vago. Se lo sarò, sarei felice di elaborare.