2014-10-04 5 views
1

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

+0

Нет. Вы не должны беспокоиться об уничтожении объектов, которые вы создаете в 'Java'. Только беспокоиться о закрытии их, они указывают на какой-то поток или ресурс. – Tirath

+0

Если GC не собирал объекты, которые больше не используются, не будет ли GC бесполезным? –

+0

Предлагаю использовать пул объектов, затем вы можете перерабатывать уже созданные объекты и уменьшать количество мусора. – Veljko

ответ

1

Я знаю, что в java есть мусор, но как я действительно знаю, что экземпляры класса, которые больше не используются, будут деконструированы?

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

+0

GC намного умнее, чем это. Он не учитывает ссылки. В противном случае древовидная структура, в которой родитель знает своих детей, а дети знают своего родителя (например), никогда не будет GCed. –

+0

@JB Nizet Где я написал, насколько он умный ?. Он спрашивает о «экземплярах класса, которые больше не используются». Я ответил на вопрос. – Alboz

+0

В вашем ответе говорится: «Каждый объект, который не имеет переменной, ссылающейся на него (указатель), имеет право на сбор мусора». Это говорит о том, что объекты, все еще имеющие ссылку на них, не имеют права, и что вы должны убедиться, что для всех ссылок установлено значение null, чтобы сделать объекты подходящими, что неверно. –

0

Java Virtual Machine (JVM) несет ответственность, чтобы вызвать завершить метод на всех неиспользуемых объектов по телефону:

System.runFinalization(); 

или

Runtime rt = Runtime.getRuntime(); 
     rt.runFinalization(); 

Однажды JVM подготовить список неиспользуемых объекты, он вызывает GC (Garbage Collector), предоставляя этот список неиспользуемых объектов.

И, если вы хотите вызвать дс вручную, используйте:

System.gc(); 
Runtime rt = Runtime.getRuntime(); 
rt.gc(); 

или использовать это непосредственно:

Runtime.getRuntime.gc(); 

Важно: Но в принципе, вы не можете заставить JVM вызывать GC. Скорее вы можете запросить, и этот запрос может или не может очистить память.

0

В основном это хорошо, чтобы оставить этот вид вещи сборщику мусора. Однако, если вы беспокоитесь о том, что здесь загружались неиспользуемые объекты, занимающие биты памяти, вы можете использовать object pool. Здесь вы создаете фиксированное количество объектов, отслеживаете, что используете, и перерабатываете их, поэтому они ограничены одним блоком памяти.

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