Liberare memoria: modello osservatore?

1

Sto costruendo un'applicazione scientifica in matlab che gestisce diverse centinaia di matrici di grandi dimensioni (grandi come in "pochissime di queste si inseriranno nella ram"). Ogni matrice è contenuta all'interno di un oggetto dedicato per gestire i suoi metadati (il nome della proprietà è .data).

Uso il metodo getter per caricare i dati da file in ram non appena necessario.

Come decido quando scaricare? La maggior parte dell'accesso ai dati dell'oggetto sarà raggruppata, quindi non voglio scaricare ogni volta che ho finito con il recupero dei dati. Inoltre, potrei aver bisogno di usarne uno o due più spesso di altri. Non penso di poterlo risolvere all'interno di ogni oggetto, quindi ho pensato che avrei potuto implementare una funzione pubblica per cancellare la matrice dalla ram, chiamata da un oggetto esterno che decide quando (e possibilmente, quale) oggetto è troppo in questo momento.

Ha senso o è una ricetta per il disastro? Questo conta come osservatore, o c'è qualcos'altro che potrei usare? Come identificare i "buoni" criteri decisionali?

Grazie!

    
posta phi 04.07.2014 - 09:55
fonte

1 risposta

2

Posso provare a rispondere alla tua domanda a un livello generico.

È possibile creare un oggetto repository centralizzato che contiene tutti gli oggetti matrice attualmente caricati e registra anche gli accessi ad essi. Carica gli oggetti matrix al primo accesso e li memorizza internamente. Tutte le richieste per questi oggetti matrix devono passare attraverso questo oggetto repository per registrarle correttamente.

Quindi, il repository utilizza un algoritmo di invecchiamento come FIFO o LRU per decidere quali oggetti di matrice da scaricare. Una volta raggiunta una soglia definita (come la dimensione massima della memoria), trova il prossimo candidato per la rimozione utilizzando l'algoritmo selezionato e quindi lo scarica.

È possibile modificare la soglia e l'algoritmo in base alle proprie esigenze e alla configurazione del sistema.

    
risposta data 04.07.2014 - 10:04
fonte

Leggi altre domande sui tag