在GC之后,内存中对象的地址会被更改以及对象引用为何仍然有效?

Man*_*Mai 4 java garbage-collection

为了Java中的垃圾收集,在Heap和Heap中创建Java对象被分为三个部分或几代,这些被称为Young generation,Tenured或Old Generation和Perm Area of​​ heap.新一代进一步分为三个部分,称为伊甸园空间,幸存者1和幸存者2空间.当一个对象最初在堆中创建时,它将在Eden空间内的新一代中创建,并且在随后的Minor Garbage集合之后,如果对象存活,则它将被移动到幸存者1,然后在Major Garbage集合之前将幸存者2移动到Old或tenured generation.

阅读更多:http://javarevisited.blogspot.com/2011/04/garbage-collection-in-java.html#ixzz2MeKK2gBA

所以我的问题是,在这些移动动作之后,应该更改内存中的地址以及为什么对象引用仍然有效?

NPE*_*NPE 7

如果GC决定移动一个对象,它有责任更新对该对象的所有引用.

这对Java程序员来说是透明的:他们可以将引用视为抽象句柄,而不用担心JVM如何管理对象存储.