Java сборщик мусора и как он знает, какие объекты необходимо освободить из памяти - PullRequest
0 голосов
/ 13 мая 2011

Я читал из нескольких источников, что сборщик мусора Java освобождает память от объектов, которые не используются. Мой вопрос: откуда он знает, что он не используется? Правильно ли я сказал, что если я инициализировал некоторый массив, и на этот массив никогда не ссылались, не использовал или не изменил, что пространство в памяти для этой переменной будет освобождено?

Спасибо

Ответы [ 4 ]

1 голос
/ 13 мая 2011

тогда это будет кандидат на сборщик мусора. если нет ссылки на этот объект, он будет кандидатом. Когда он будет собран, зависит от стратегии GC.

0 голосов
/ 05 декабря 2011

сборщик мусора использует недетерминированный подход ... т.е. вы никогда не будете знать, когда он будет работать ... вы можете запросить его, но никогда не будете уверены, что он запустится, как только вы его вызовете ...

пример, который вы указали для массива, будет очищен из памяти только в том случае, если в вашей программе нет абсолютно никаких ссылок, или после выполнения всех из них он исчерпал все ссылки на себя, но вы не можете быть уверены,когда эта память будет освобождена ...

вы можете думать о сборщике мусора как о ленивом ... но, зачем винить в этом, ведь он делает всю грязную работу по уборке;)

0 голосов
/ 13 мая 2011

В соответствии со спецификациями вы можете запросить GC, но не можете форсировать его.

В вашем случае массив будет кандидатом в GC, когда JVM определяет, что ему требуется память, она запускает GC, обычно это происходит, когда доступная память составляет 15% от всей памяти, это то, чтоЯ наблюдал на IBM JVM, но не всегда так.

0 голосов
/ 13 мая 2011

Сборщик мусора освобождает память только тогда, когда это необходимо.Таким образом, нет никакой гарантии, что он когда-либо будет освобожден.

Любой объект, который не доступен из стеков Thread через жесткую ссылку, может быть освобожден.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...