2014-07-27 2 views
1

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

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

RandomClass className = new RandomClass(argument1); 
while(className.classMethod() != null){ 
    className = new RandomClass(argument i) 
    i++; 
} 

Я предполагаю, что The className с аргументом один будет уничтожен, когда className с Argument2 называется? или я должен был бы

RandomClass className = new RandomClass(argument1); 
while(className.classMethod() != null){ 
    className = new RandomClass(argument i); 
    className = null; 
    i++; 
} 

только для безопасности?

+0

Google «Сбор мусора Java» –

+0

У вас нет «указателей классов», у вас есть * ссылки * на * объекты *. Объекты являются * экземплярами * некоторого класса (например, «RandomClass»), но это не делает их классами. И, как было предложено, изучите «сбор мусора» на Java. –

+0

Возможный дубликат [Устанавливает ли объекты Java объекты null больше ничего?] (Http://stackoverflow.com/questions/850878/does-setting-java-objects-to-null-do-anything-anymore) –

ответ

3

Не нужно путать переменные, новые java и C#/C++ двигатели будут заботиться о сборке мусора, а оперативная память будет не теряться.

+1

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

+0

Вы правы Я имел ввиду недавние компиляторы C# C++. В старые времена переполнения стека C было то, что действительно произошло :) – Rusty30

3

Перед входом в цикл, у вас есть

className --> 1234 // an identifier of the object for our purposes 

После цикла не итерация один

className --> 9542 

Переменная className ссылается на другой объект, и теперь ваша программа больше не держит ссылки на объект с идентификатором 1234. Таким образом, это будет мусор, собранный в конечном итоге. Вам не нужно назначать переменную null. (Есть некоторые чрезвычайно редкие случаи, когда вы бы, но не ищите проблем с ними.)

+0

Спасибо и то и другое. Хотел бы я проголосовать за обоих, но, простите, Сотириос, я передам его Расти, так как у него только 98 человек. Надеюсь, вы понимаете. – user3256725

+0

@ user3256725 Вам не нужно извиняться, просто убедитесь, что вы поняли понятия. –

Смежные вопросы