Sto utilizzando strumenti su un dispositivo per cercare di capire se ho perdite di memoria o abbandonato. Nello specifico sto usando perdite e allocazioni. Mentre gli strumenti non evidenzia alcuna perdita, ciò non significa che non abbia problemi di memoria. Ci sto lavorando da settimane, e non mi sembra di essere più vicino a capire quali problemi ho (ugh).Strumenti e crescita dell'heap, quando la crescita è davvero una perdita?
Sto testando una particolare azione eseguendo un heapshot dopo l'azione e ripetendo. Dopo le prime poche generazioni di "stabilirsi", posso vedere che la crescita e il conteggio persistente iniziano tutti ad un certo numero (diversi kb). Dopo molte iterazioni ripetute (diciamo 10-20), alcune (non tutte) lentamente finiscono per drenare a 0. Ci vuole un po ', ma succede. Le generazioni in cui rimane memoria persistente non mi mostrano mai nulla di utile, poiché la traccia dello stack mostra tutte le librerie di sistema.
Quindi le mie domande sono:
- Che cosa significa questo tipo di comportamento indica? Ho problemi di memoria? C'è qualche tipo di memoria pigra della memoria da qualche parte?
- In un mare di iterazioni che mostrano memoria persistente, cosa significa una iterazione di crescita dell'heap zero?
- Se la traccia dello stack per una particolare generazione punta solo alle librerie di sistema, significa che la crescita dell'heap per quella generazione è valida o che c'è un bug? O potrebbe ancora significare che c'è qualcosa che trattiene il ricordo dalla mia parte?
- Che cosa significa quando la traccia dello stack mostra la libreria e il metodo, ma è disattivata come il codice di sistema e ha un'icona piccola, contro una linea con la libreria e il metodo che è in nero e ha una piccola persona icona?
- Se ho qualcosa come un ciclo di mantenimento, la crescita persistente non sarebbe coerente?
Qualsiasi risposta alle informazioni sarebbe estremamente utile!
Hai capito? Sto vedendo la stessa cosa quando si assegnano molti nuovi controller. –
Dopo aver lottato per un po 'di tempo, ho calcolato che anche una crescita dell'heap zero dopo 20-30 iterazioni era un segno che qualcosa era giusto e andato avanti. Tutte le allocazioni che ho trovato provenivano da librerie di sistema, e la memoria che si stava accumulando non era molto. Non è una buona risposta, lo so. Se qualcun altro può intervenire, sarebbe fantastico. – dragonflyesque
Potresti avere un circuito chiuso da qualche parte dove le cose non vengono liberate abbastanza velocemente. Avvolgi questo ciclo stretto in @autorelease – uchuugaka