относительно сбора мусора и ссылок - PullRequest
1 голос
/ 25 октября 2011

У меня есть вопрос, касающийся ссылок и сборщика мусора в Java.

При вызове метода с параметром, скажем, массива, отправляется копия ссылки на массив, который считается параметром.

Гипотеза: сборщик мусора запускается точно после вызова метода или при выполнении операций внутри метода для рассматриваемого массива.

Теперь является той же ссылкой для массива в вызывающем методеи в вызываемом методе, независимо от операций и перемещений, выполняемых сборщиком мусора (сборщик мусора может перемещать ссылку из eden в оставшийся в живых 1)?

Более простое выражение для вопроса: можете ли вы полагаться на этосправочная копия, чтобы использовать ее в качестве механизма для параметров, отправляемых «по ссылке»?

Большое спасибо!Roxana

Ответы [ 3 ]

2 голосов
/ 25 октября 2011

Если вы пытаетесь спросить, можете ли вы фальшиво передать по ссылке, например так:

// We'd like to pass x by reference...
String x = "hello";
String[] array = { x };
foo(array);
x = array[0];

...

static void foo(String[] array)
{
    array[0] = array[0] + "foo";
}

... тогда да, это всегда будет работать и не будет зависеть от сбора мусора.

Я бы лично попытался избежать этого, но да, это сработает:)

Обратите внимание, что в отличие от реальной передачи по ссылке, если метод выдает исключение, тогда назначение послевызов метода не произойдет, поэтому вы потеряете «изменение».

0 голосов
/ 25 октября 2011

Некоторые сборщики мусора работают, находя объекты с без ссылок и освобождая место, которое они занимают.

Другие работают, находя все объекты с ссылками и перемещая их в новое пространство объектов. Когда все объекты были перемещены, пространство старого объекта восстанавливается. В этом случае все ссылки обновляются.

0 голосов
/ 25 октября 2011

Сборщик мусора удаляет объект, к которому нет доступа по любой ссылке. В вашем примере есть как минимум 2 ссылки, которые можно использовать для доступа к объекту. Поэтому он не будет удален, и вы можете использовать ссылки для доступа к нему.

...