Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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 变量的地址会因为G1垃圾回收而改变吗?_Java_G1gc - Fatal编程技术网

Java 变量的地址会因为G1垃圾回收而改变吗?

Java 变量的地址会因为G1垃圾回收而改变吗?,java,g1gc,Java,G1gc,我正在阅读官方的JDK 12规范,不得不验证一些东西,这让我看到了一篇文章,其中写道: “G1收集活动数据量最少的区域(首先是垃圾!),并将活动数据压缩/排空到新区域中。其次,它使用一系列增量、并行和多阶段循环来实现其软暂停时间目标。这允许G1在定义的时间内执行必要的操作,而不考虑堆的总体大小。” 这是否意味着低活动数据密度区域中的变量可以移动到另一个位置,在这种情况下,变量的地址将发生变化 尽管人们可以挖掘实现G1这一特性的确切代码片段,但我想了解它对内存管理的影响,而不必经历整个JVM实现。

我正在阅读官方的JDK 12规范,不得不验证一些东西,这让我看到了一篇文章,其中写道:

“G1收集活动数据量最少的区域(首先是垃圾!),并将活动数据压缩/排空到新区域中。其次,它使用一系列增量、并行和多阶段循环来实现其软暂停时间目标。这允许G1在定义的时间内执行必要的操作,而不考虑堆的总体大小。”

这是否意味着低活动数据密度区域中的变量可以移动到另一个位置,在这种情况下,变量的地址将发生变化


尽管人们可以挖掘实现G1这一特性的确切代码片段,但我想了解它对内存管理的影响,而不必经历整个JVM实现。

是的,变量在内存中的位置可能会因垃圾收集而改变(也不是针对G1)


另外,不清楚你为什么会担心这一点。如果没有更多的细节、背景和对正,您可能不应该这样做。

如果对象驻留在不同的区域,那么它可能会发生变化-是的,当它移动到不同的区域时。但是对该对象的引用在原子上发生了更改,应用程序甚至不会注意到这一点。一些地面军事是如何做到这一点的

您什么时候可以访问变量的地址?(您是否担心对象地址会被错放?)是的,对象地址会发生变化,任何垃圾收集器都可以这样做,不仅仅是G1,但这对您来说并不重要,因为您不知道对象的地址(除非您使用JNI)。@Andreas我这样问是因为它在调试中可能会起作用,因为有时人们想检查是否将正确的实例与另一个实例进行比较。但是,我想我明白你的意思了:对象实例id(或“identity hashcode”)与实际地址不同(而不是基于实际地址),对吗?@Calicoder Correct。哈希代码和对象的地址无关。在Java中,没有办法获取对象的地址。关于
identityHashCode()
如何与内存(重新)分配交互。这个问题的唯一目的是理解,我认为这是这个问题的充分目的。谢谢你的回答