Количество времени, проведенного в ГХ, зависит от двух факторов:
- Сколько объектов живое (= может быть достигнуто от любого)
- Сколько реализовано мертвых объектов
finalize()
Объекты, которые не могут быть достигнуты и которые не используют finalize()
, ничего не стоят для очистки в Java, поэтому Java обычно находится на одном уровне с другими языками, такими как C ++ (и часто намного лучше, потому что C ++ тратит много время для удаления объектов).
Итак, что вам нужно сделать в вашем приложении, это сократить количество объектов, которые выжили, и / или сократить ссылки на объекты (которые вам больше не нужны) ранее в коде. Пример:
Если у вас очень длинный метод, вы сохраните все объекты, на которые вы ссылаетесь, из локальных переменных. Если вы разделите этот метод на множество более мелких методов, ссылки будут потеряны быстрее, и GC не придется иметь дело с этими объектами.
Если вы поместите все, что вам может понадобиться, в огромные хеш-карты, карты будут поддерживать все эти экземпляры до тех пор, пока ваш код не завершится. Поэтому, даже если они вам больше не нужны, GC все равно придется тратить на них время.