Il modo migliore per ridurre il consumo di memoria sugli oggetti Java persistenti

0

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.

    
posta user0000001 06.06.2018 - 00:02
fonte

0 risposte

Leggi altre domande sui tag