Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对象引用在GC之后是否会更改_Java_Garbage Collection - Fatal编程技术网

Java 对象引用在GC之后是否会更改

Java 对象引用在GC之后是否会更改,java,garbage-collection,Java,Garbage Collection,我对GC有点困惑,当GC执行时,它会停止所有线程并收集垃圾引用 在GC之后,jvm是否执行任何压缩 压缩:意味着移动“正在使用”的内存区域,以消除由终止引用引起的孔 如果是,那么jvm是维护旧引用还是为所有剩余对象分配新引用?关于压缩:这取决于使用的算法。因为所有年轻一代的地面军事系统都在复制收集器:是的,它们确实在复制收集器,它们甚至将所有幸存的对象重新定位到不同的内存区域。对于旧一代收集器,这取决于使用的收集算法。虽然标准的标记扫描压缩收集器正在压缩(这就是为什么有“压缩”的原因),但CMS

我对GC有点困惑,当GC执行时,它会停止所有线程并收集垃圾引用

在GC之后,jvm是否执行任何压缩

压缩:意味着移动“正在使用”的内存区域,以消除由终止引用引起的孔


如果是,那么jvm是维护旧引用还是为所有剩余对象分配新引用?

关于压缩:这取决于使用的算法。因为所有年轻一代的地面军事系统都在复制收集器:是的,它们确实在复制收集器,它们甚至将所有幸存的对象重新定位到不同的内存区域。对于旧一代收集器,这取决于使用的收集算法。虽然标准的标记扫描压缩收集器正在压缩(这就是为什么有“压缩”的原因),但CMS收集器(并发标记扫描)通常不会进行任何压缩,除非这是不可避免的,因此必须管理堆碎片


当对象被移动时(无论是因为使用拷贝收集器还是因为压缩),现有的引用都会被更新,以指向新的内存位置。

自从您提到JVM以来,我添加了Java作为语言。但是,如果您引用的是其他内容(例如Scala),请正确标记。感谢您的建议,您可以轻松更新局部变量、类实例和对象数组实例的引用。但是JVM如何处理推送到操作数堆栈的引用呢?