In Android SDK 21 nel codice Object.java, ho trovato il termine "Puntatore Brooks". Ho letto il post here ma non ne ho una chiara visione. Nel post, è descritto come riferimento all'Oggetto stesso nell'heap. Ma a cosa serve?
Come sarà utile nella raccolta dei dati obsoleti e nell'evacuazione degli oggetti?Puntatore Brooks nella classe dell'oggetto
risposta
Il blog di Roman spiega come funziona la sua implementazione di GC.
È una nuova funzionalità nel Shenandoah GC, permette thread delle applicazioni di interagire con gli oggetti in mucchio mentre vengono spostati durante la compattazione (spostare gli oggetti di riferimento in una posizione migliore), eliminando la necessità di "fermare il mondo"
Prima di ciò, era necessario impedire l'accesso agli oggetti di riferimento mentre il GC li spostava, per garantire che nessuno potesse accedere all'oggetto finché non si trovasse nella sua nuova posizione. Se hai provato ad accedere all'oggetto, ma il GC lo ha già spostato, si verificheranno dei problemi. Questo è il motivo per cui abbiamo "stop-the-world" quando è il momento di GC (nessun thread è consentito accedere agli oggetti in heap per misure di sicurezza). Mentre gli oggetti si muovono, il grafico dell'oggetto è considerato incoerente, quindi è meglio impedire l'accesso ad esso.
Con questo nuovo sistema, un forwarding pointer (scorrere verso il basso per puntatore inoltro) viene messo al posto dell'oggetto di riferimento usato per essere, che fa riferimento nuova posizione dell'oggetto. Ora non dobbiamo preoccuparci che l'oggetto non sia lì se il GC dovesse spostarlo, dal momento che possiamo ancora fare riferimento al puntatore di inoltro. Ora possiamo accedere all'oggetto mentre il GC lo sposta intorno a, il che significa che non è più necessario impedire l'accesso durante la compattazione.
Il "puntatore forwarding" Mi sto riferendo a è Brooks Pointer
- 1. Puntatore contro variabile nella classe
- 2. Inizializzazione univoco del puntatore nella classe
- 3. Puntatore della classe base contro il puntatore della classe ereditata?
- 4. J2ME (Java) - Eccezione puntatore nullo rilevata nella classe display
- 5. C++ puntatore alla classe
- 6. Classe puntatore a funzione membro
- 7. Puntatore per funzionare nella ROM
- 8. puntatore di un puntatore nella lista collegata append
- 9. Cast a puntatore struct per interfacciarsi puntatore nella Golang
- 10. C++ typecast: cast un puntatore dal puntatore void al puntatore della classe
- 11. Puntatore funzione al membro della classe statico?
- 12. Dimensioni di una classe con puntatore "this"
- 13. Ritorno puntatore di classe da una funzione
- 14. il puntatore "this" all'interno di una classe
- 15. L'espressione deve avere il tipo puntatore-classe
- 16. C++: passando il puntatore a un'altra classe
- 17. Utilizzo puntatore alla matrice nella pericoloso C#
- 18. Puntatore su Struct utilizzato nella funzione
- 19. Converti il puntatore "questo" nella stringa
- 20. + Operatore nella stringa Classe
- 21. AssemblyInitialize nella classe derivata
- 22. Puntatore Objective-C alla classe che implementa un protocollo
- 23. Puntatore alla classe di base e l'ereditarietà privata
- 24. Come chiamare metodo della classe base attraverso puntatore alla classe base che punta alla classe derivata
- 25. C++: copia profonda di un puntatore della classe Base
- 26. puntatore al puntatore rispetto a un puntatore
- 27. Funzione Puntatore alla funzione membro della classe template? (C++)
- 28. Ritorno del tipo astratto nella classe base
- 29. Puntatore Puntatore con argv
- 30. Impostazione equità nella classe semaforo
è il puntatore di inoltro sempre aggiornato con il nuovo indirizzo dell'oggetto nel processo di muoversi? – Diffy
@Diffy Quando si verifica l'evacuazione, gli oggetti vengono spostati una sola volta: da "from-regions" a "to-regions". I puntatori di inoltro vengono posizionati nello spazio per prendere il posto di un oggetto spostato nello spazio. Non è necessario aggiornare costantemente il puntatore di inoltro. È tutto citato nel suo blog :) –