L'indirizzo di un oggetto è costante durante il suo ciclo di vita o può cambiare? Ho solo pensato che l'indirizzo di un oggetto non cambia mai. È JVM dipendente? Non ho trovato alcuna specifica chiara.L'indirizzo di un oggetto è stato corretto durante il suo ciclo di vita?
risposta
L'indirizzo di un oggetto in java non è fisso; piuttosto, può cambiare (soggetto a condizioni).
Questo perché normalmente gli oggetti sono allocati nello spazio eden. Quindi si spostano nello spazio dei sopravvissuti, quindi anche nello spazio di vecchia generazione se sopravvivono a cicli di raccolta dei rifiuti. Quindi cambia. Ma se l'oggetto è allocato nello spazio eden e anche i rifiuti raccolti restano nello stesso spazio, l'indirizzo non cambierà. Allo stesso modo se l'oggetto è troppo grande per essere allocato nello spazio eden, allora la JVM alloca l'oggetto nella vecchia generazione e se è garbage collocato rimanendo dove è stato allocato, anche l'indirizzo non cambia.
Un'altra cosa che dovresti sapere che anche se un oggetto rimane in una generazione, se si tratta di garbage collection rimanendo nella stessa generazione, l'indirizzo potrebbe cambiare, perché potrebbe essere stato spostato dal garbage collector mentre faceva la garbage collection , per esempio dallo spazio di eden a sopravvissuto, sopravvissuto a sopravvissuto o persino alla vecchia generazione in caso di compattazione.
Dalle condizioni precedenti è chiaro che lo spostamento di un indirizzo dipende da JVM.
Spero che aiuti.
EDIT
Rispondendo alla domanda qui sotto:
se creo un nuovo oggetto e riporlo in una mappa, dove viene immagazzinato sulla base di hashCode (che viene generato utilizzando la memoria dell'oggetto posizione come per java). Ora l'indirizzo dell'oggetto è cambiato (risultante in un diverso hashCode), quindi come da risposta, il codice non può mai recuperare l'oggetto dalla mappa ??
hashCodes
vengono salvati nell'intestazione dell'oggetto da JVM. Quindi è costante. Durante la creazione di un object
viene assegnato a 1
per impostazione predefinita, ma quando si utilizza l'oggetto per la prima volta viene calcolato e viene memorizzato nell'intestazione. Non cambia mai per tutta la durata dello Object
.
La risposta sembra essere corretta.Ho solo un dubbio, se creo un nuovo oggetto e lo memorizzo in una mappa, dove viene memorizzato in base a hashCode (che viene generato utilizzando la posizione di memoria dell'oggetto come per java). Ora l'indirizzo dell'oggetto è cambiato (risultante in un diverso hashCode), così come per la risposta, il codice non può mai recuperare l'oggetto dalla mappa ?? – dharam
@dharam si prega di vedere la mia modifica. – Trying
Non in generale. Molti garbage collector della JVM spostano gli oggetti e la lingua non fornisce garanzie sulla posizione dell'oggetto.
Ci sono alcuni GC (plain Mark & Sweep, ad esempio) che non lo fanno; è possibile utilizzare una JVM specializzata che supporta questi (ad esempio una build personalizzata di Jikes RVM
) se si richiede questa funzionalità.
Si noti che ogni oggetto può ancora contenere un ID (soprattutto) univoco (almeno nelle JVM che ho visto), in parte per supportare un'implementazione di base di hashcode
.
- 1. Qual è il ciclo di vita di un controller AngularJS?
- 2. Qual è il ciclo di vita di un oggetto HttpSession di Java?
- 3. Qual è il modo corretto di gestire il ciclo di vita delle attività con OpenGL
- 4. Android View Ciclo di vita
- 5. Qual è il ciclo di vita di Watch App?
- 6. ViewBag/ViewData Ciclo di vita
- 7. JManuale del ciclo di vita
- 8. Reagire componenti del ciclo di vita, stato e redux
- 9. come funziona il ciclo di vita?
- 10. Ciclo di vita Android SharedPreference
- 11. Ciclo di vita dell'oggetto in NHibernate
- 12. Qual è il modo corretto per evitare il ciclo di conservazione durante l'utilizzo dei blocchi
- 13. Qual è il ciclo di vita corretto di un proxy client del servizio WCF in Silverlight 3?
- 14. Come è l'identità dell'utente | Impostazione principale durante il ciclo di vita dell'applicazione
- 15. Ciclo di vita dell'oggetto statico Android
- 16. ASP.NET MVC Controller Ciclo di vita
- 17. Qual è il ciclo di vita di una variabile statica pubblica in Android?
- 18. FMDB: è buona rimanere in un database aperto durante l'intero ciclo di vita dell'app ios?
- 19. Il ciclo di vita del servizio WCF ospitato in IIS
- 20. React animazioni del ciclo di vita
- 21. Ciclo di vita e servizio dell'applicazione Android
- 22. Un buon modo per memorizzare dati durante il ciclo di vita delle applicazioni Android?
- 23. vita di un nuovo oggetto senza riferimento
- 24. Visualizza il ciclo di vita del controller su UIModalPresentationOverCurrentContext
- 25. Qual è il modo corretto di annullare la registrazione dei callback del ciclo di vita delle attività?
- 26. È possibile eseguire il ciclo di un oggetto Classe C#?
- 27. È possibile eseguire il ciclo di un oggetto Collection.Request.Form?
- 28. Ciclo di vita della classe dell'applicazione mentre il servizio è in esecuzione
- 29. Quante volte una query compilata deve ricompilare durante il ciclo di vita di un'applicazione?
- 30. Collegamento al ciclo di vita di un frammento come Application.ActivityLifecycleCallbacks
sua JVM interno, perché l'indirizzo negozio JVM di riferimento nelle variabili locali, collezionisti JVM immondizia svolge ruolo dopo oggetto e riferimento creazione che oggetto è in uso, invisibile o non raggiungibile –